Добрый день, подскажите, кто сталкивался с такой странной проблемой: Я обрабатываю событие Worksheet_BeforeDoubleClick: при двойном нажатии мышью открывается форма со списком (ListBox) и check-box-ами Так вот при открытии формы в нее почему-то ошибочно передаются как бы те 2 клика (которые представляли дабл клик). Соответственно, в списке при открытии сразу случайно выделяются 2 элемента, которые пользователь даже еще и не успел выбрать. Почему-то выделяется первый элемент, а также второй, который визуально на форме соответствует положению мыши.
Если обрабатывать событие правой кнопки мыши (Worksheet_BeforeRightClick), то таких проблем не возникает - ничего лишнего в списке случайным образом не выделяется. Но хочется именно по двойному клику открывать форму.
Никто не знает как это обойти? Может какой-то delay сделать для кликов? Прикладыю файл, можно попробовать понажимать (но не уверен что на других компьютерах сразу воспроизведется эта ошибка)
Добрый день, подскажите, кто сталкивался с такой странной проблемой: Я обрабатываю событие Worksheet_BeforeDoubleClick: при двойном нажатии мышью открывается форма со списком (ListBox) и check-box-ами Так вот при открытии формы в нее почему-то ошибочно передаются как бы те 2 клика (которые представляли дабл клик). Соответственно, в списке при открытии сразу случайно выделяются 2 элемента, которые пользователь даже еще и не успел выбрать. Почему-то выделяется первый элемент, а также второй, который визуально на форме соответствует положению мыши.
Если обрабатывать событие правой кнопки мыши (Worksheet_BeforeRightClick), то таких проблем не возникает - ничего лишнего в списке случайным образом не выделяется. Но хочется именно по двойному клику открывать форму.
Никто не знает как это обойти? Может какой-то delay сделать для кликов? Прикладыю файл, можно попробовать понажимать (но не уверен что на других компьютерах сразу воспроизведется эта ошибка)Serrg
В код на даблклик добавьте (можно самой первой) строку Cancel = False
_Boroda_, Саша, наверное, Cancel = True имел в виду? False-то оно и так по дефолту. Только, увы, не спасает ни True, ни False. В чём-то другом причина, пока не пойму. Если в отладке идти, то возникают паузы, после которых список чистенький, без отметок...
В код на даблклик добавьте (можно самой первой) строку Cancel = False
_Boroda_, Саша, наверное, Cancel = True имел в виду? False-то оно и так по дефолту. Только, увы, не спасает ни True, ни False. В чём-то другом причина, пока не пойму. Если в отладке идти, то возникают паузы, после которых список чистенький, без отметок...Gustav
У меня такая мысль есть - перед открытием формы добавить открытие какого-нибудь окна, чтобы оно на себя захватывало эти клики. Но чтобы оно само закрывалось через 10 милисекунд. Т.е. смысл в том, чтобы сделать паузу.
Как можно сделать открытие фиктивного окна, которого на экране видно не будет? Т.е. оно как бы открылось до открытия формы на 0,01 секунды и сразу закрылось, пользователь даже его не видит.
Как можно написать это на VBA?
У меня такая мысль есть - перед открытием формы добавить открытие какого-нибудь окна, чтобы оно на себя захватывало эти клики. Но чтобы оно само закрывалось через 10 милисекунд. Т.е. смысл в том, чтобы сделать паузу.
Как можно сделать открытие фиктивного окна, которого на экране видно не будет? Т.е. оно как бы открылось до открытия формы на 0,01 секунды и сразу закрылось, пользователь даже его не видит.
А еще можно до запуска формы паузу не ставить, а сделать ListBX "выключенным" (Properties-ListBX, установить свойство Enable - False) А паузу повесить в конце LoadList [vba]
Код
Public Sub LoadList() ... Tm = Timer Do While Timer - Tm < 0.2: DoEvents: Loop ListBX.Enabled = True End Sub
[/vba] UPD. Файлик приложила
А еще можно до запуска формы паузу не ставить, а сделать ListBX "выключенным" (Properties-ListBX, установить свойство Enable - False) А паузу повесить в конце LoadList [vba]
Код
Public Sub LoadList() ... Tm = Timer Do While Timer - Tm < 0.2: DoEvents: Loop ListBX.Enabled = True End Sub
Тоже помню столкнулся с такой штукой, и на этом файле есть баг (и в 2010, и в 2003). Чем тогда лечил - не помню... Да и вылечил ли.. Тут можно сделать ещё так - по умолчанию листбокс.enabled=false, а после открытия формы придумать как его сделать доступным (получилось только по лишнему клику, не комильфо, может таймером?).
P.S. Manyasha !
Тоже помню столкнулся с такой штукой, и на этом файле есть баг (и в 2010, и в 2003). Чем тогда лечил - не помню... Да и вылечил ли.. Тут можно сделать ещё так - по умолчанию листбокс.enabled=false, а после открытия формы придумать как его сделать доступным (получилось только по лишнему клику, не комильфо, может таймером?).
Интересно, что если столбец F увести с "линии огня", например, уменьшив ширину столбца E (Склад), то тоже всё хорошо становится. Можно, наверное, и c Top, Left формы поиграться в зависимости от Target.Top и Target.Left.
Интересно, что если столбец F увести с "линии огня", например, уменьшив ширину столбца E (Склад), то тоже всё хорошо становится. Можно, наверное, и c Top, Left формы поиграться в зависимости от Target.Top и Target.Left.