Страницы: 1
RSS
Ложное срабатывание события change листбокса при запуске формы, Событие change листбокса ложно срабатывает, если курсор, при нажатии на кнопку запуска формы, стоит на месте появления листбокса
 
Продолжаю постигать тайны объекта ListBox. На этот раз событие change листбокса ложно срабатывает, если курсор, при нажатии на кнопку запуска формы, находится на месте появления листбокса. Событие click тоже. В примере расписал подробнее и сделал гротескно большую кнопку. Стилистическое оформление формы и листбокса роли не играет, на свежесозданной форме с «заводскими» настройками эффект тот же.

Вариант решения: расположить кнопку и форму так, чтобы они не пересекались. Но в реальном файле, конечно же, самый лаконичный и правильный вариант их размещения – с пересечением.

Что можно попробовать? Может хитрые флаги, блокировку нажатий в первую секунду после запуска формы или ещё что?  
 
Максим, спасибо за новый интересный пример.
Обойти в "лоб", конечно, можно. В конце события Initialize запомнить значение timer() и, если событие Change произошло в течение, скажем, 0,1 секунды, то сбросить в обработчике этого события появившиеся галочки в Listbox.
Изменено: sokol92 - 14.08.2019 20:55:26
Владимир
 
Цитата
sokol92 написал:
В конце события Initialize запомнить значение timer()
так можно просто флажок, зачем еще и таймер)
только в листбоксе галочка все равно остается, хоть сообщение и не появляется.
Я для себя использую листбоксы только для вывода информации - слишком ограничен функционал и глюков многовато.
Если нужны какие то манипуляции с данными -  использую лист ексель либо listview
 
Спасибо, уточнил формулировки.
Владимир
 
Упрощая реальную задачу до примера, потерял важную информацию. Уточняю. Листбокс с MultiSelect = 1, и ListStyle = 1 (галочки) используется для скрытия\отображения столбцов в таблице. При инициализации формы, если столбец виден, то элемент, соответствующий столбцу, выделяется. То есть ложно элемент может быть и выделен и снят. И изначальное состояние всех элементов (стоит \ не стоит галочка) может быть разным.
Цитата
sokol92 написал:
сбросить в обработчике этого события появившиеся галочки в Listbox.
Это как вариант, только придётся циклом по всем элементам вернуть значения к изначальным (если значения запомнить при запуске формы), т. к. при MultiSelect = 1 нельзя отследить какие именно элементы были нажаты (или можно?).  

Dima S, первый раз слышу про listview. С ходу сложно разобраться конечно. Нужно время, чтобы понять подходит ли эта штука.
Изменено: mvzobov - 15.08.2019 09:36:23
 
Можно попробовать так (с задержкой в секунду):
Код
Sub RunForm()
  Application.OnTime Now + TimeSerial(0, 0, 1), "Runform2"
End Sub
 
Sub RunForm2()
  UserForm1.Show
End Sub
Изменено: sokol92 - 15.08.2019 12:01:03
Владимир
 
Цитата
mvzobov написал:
(галочки) используется для скрытия\отображения столбцов в таблице
Может быть тогда после активации формы пробежаться по столбцам и установить "флажки" в ЛистБоксе по состоянию сркыт/отображён столбец?
Страницы: 1
Наверх