Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Ошибочная передача кликов мыши на форму из даблклика - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Ошибочная передача кликов мыши на форму из даблклика
Serrg Дата: Среда, 04.03.2015, 00:29 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, подскажите, кто сталкивался с такой странной проблемой:
Я обрабатываю событие Worksheet_BeforeDoubleClick: при двойном нажатии мышью открывается форма со списком (ListBox) и check-box-ами
Так вот при открытии формы в нее почему-то ошибочно передаются как бы те 2 клика (которые представляли дабл клик). Соответственно, в списке при открытии сразу случайно выделяются 2 элемента, которые пользователь даже еще и не успел выбрать. Почему-то выделяется первый элемент, а также второй, который визуально на форме соответствует положению мыши.

Если обрабатывать событие правой кнопки мыши (Worksheet_BeforeRightClick), то таких проблем не возникает - ничего лишнего в списке случайным образом не выделяется.
Но хочется именно по двойному клику открывать форму.

Никто не знает как это обойти? Может какой-то delay сделать для кликов?
Прикладыю файл, можно попробовать понажимать (но не уверен что на других компьютерах сразу воспроизведется эта ошибка)
К сообщению приложен файл: _-2.xls (76.5 Kb)


Сообщение отредактировал Serrg - Среда, 04.03.2015, 00:32
 
Ответить
СообщениеДобрый день, подскажите, кто сталкивался с такой странной проблемой:
Я обрабатываю событие Worksheet_BeforeDoubleClick: при двойном нажатии мышью открывается форма со списком (ListBox) и check-box-ами
Так вот при открытии формы в нее почему-то ошибочно передаются как бы те 2 клика (которые представляли дабл клик). Соответственно, в списке при открытии сразу случайно выделяются 2 элемента, которые пользователь даже еще и не успел выбрать. Почему-то выделяется первый элемент, а также второй, который визуально на форме соответствует положению мыши.

Если обрабатывать событие правой кнопки мыши (Worksheet_BeforeRightClick), то таких проблем не возникает - ничего лишнего в списке случайным образом не выделяется.
Но хочется именно по двойному клику открывать форму.

Никто не знает как это обойти? Может какой-то delay сделать для кликов?
Прикладыю файл, можно попробовать понажимать (но не уверен что на других компьютерах сразу воспроизведется эта ошибка)

Автор - Serrg
Дата добавления - 04.03.2015 в 00:29
_Boroda_ Дата: Среда, 04.03.2015, 07:36 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16957
Репутация: 6631 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
В код на даблклик добавьте (можно самой первой) строку
[vba]
Код
Cancel = False
[/vba]
Получится вот так
[vba]
Код
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = False
cellselectrow = Target.Row
...
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ код на даблклик добавьте (можно самой первой) строку
[vba]
Код
Cancel = False
[/vba]
Получится вот так
[vba]
Код
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = False
cellselectrow = Target.Row
...
[/vba]

Автор - _Boroda_
Дата добавления - 04.03.2015 в 07:36
Gustav Дата: Среда, 04.03.2015, 15:17 | Сообщение № 3
Группа: Админы
Ранг: Участник клуба
Сообщений: 2867
Репутация: 1208 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
В код на даблклик добавьте (можно самой первой) строку
Cancel = False

_Boroda_, Саша, наверное, Cancel = True имел в виду? False-то оно и так по дефолту. Только, увы, не спасает ни True, ни False. В чём-то другом причина, пока не пойму. Если в отладке идти, то возникают паузы, после которых список чистенький, без отметок...


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
В код на даблклик добавьте (можно самой первой) строку
Cancel = False

_Boroda_, Саша, наверное, Cancel = True имел в виду? False-то оно и так по дефолту. Только, увы, не спасает ни True, ни False. В чём-то другом причина, пока не пойму. Если в отладке идти, то возникают паузы, после которых список чистенький, без отметок...

Автор - Gustav
Дата добавления - 04.03.2015 в 15:17
Serrg Дата: Среда, 04.03.2015, 15:30 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
У меня такая мысль есть - перед открытием формы добавить открытие какого-нибудь окна, чтобы оно на себя захватывало эти клики. Но чтобы оно само закрывалось через 10 милисекунд.
Т.е. смысл в том, чтобы сделать паузу.

Как можно сделать открытие фиктивного окна, которого на экране видно не будет? Т.е. оно как бы открылось до открытия формы на 0,01 секунды и сразу закрылось, пользователь даже его не видит.

Как можно написать это на VBA?
 
Ответить
СообщениеУ меня такая мысль есть - перед открытием формы добавить открытие какого-нибудь окна, чтобы оно на себя захватывало эти клики. Но чтобы оно само закрывалось через 10 милисекунд.
Т.е. смысл в том, чтобы сделать паузу.

Как можно сделать открытие фиктивного окна, которого на экране видно не будет? Т.е. оно как бы открылось до открытия формы на 0,01 секунды и сразу закрылось, пользователь даже его не видит.

Как можно написать это на VBA?

Автор - Serrg
Дата добавления - 04.03.2015 в 15:30
Manyasha Дата: Среда, 04.03.2015, 15:58 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 902 ±
Замечаний: 0% ±

Excel 2010, 2016
Serrg, с паузой работает нормально (без открытия фиктивного окна):
[vba]
Код
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.Wait (Now + TimeValue("0:00:1"))
[/vba]
или можно так:
[vba]
Код
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Tm = Timer
Do While Timer - Tm < 0.2: DoEvents: Loop
[/vba]


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Среда, 04.03.2015, 16:02
 
Ответить
СообщениеSerrg, с паузой работает нормально (без открытия фиктивного окна):
[vba]
Код
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.Wait (Now + TimeValue("0:00:1"))
[/vba]
или можно так:
[vba]
Код
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Tm = Timer
Do While Timer - Tm < 0.2: DoEvents: Loop
[/vba]

Автор - Manyasha
Дата добавления - 04.03.2015 в 15:58
Manyasha Дата: Среда, 04.03.2015, 16:24 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 902 ±
Замечаний: 0% ±

Excel 2010, 2016
А еще можно до запуска формы паузу не ставить, а сделать 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.
Файлик приложила
К сообщению приложен файл: 2_1.xls (76.0 Kb)


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Среда, 04.03.2015, 16:27
 
Ответить
СообщениеА еще можно до запуска формы паузу не ставить, а сделать 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.
Файлик приложила

Автор - Manyasha
Дата добавления - 04.03.2015 в 16:24
Hugo Дата: Среда, 04.03.2015, 16:29 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3859
Репутация: 819 ±
Замечаний: 0% ±

365
Тоже помню столкнулся с такой штукой, и на этом файле есть баг (и в 2010, и в 2003).
Чем тогда лечил - не помню... Да и вылечил ли..
Тут можно сделать ещё так - по умолчанию листбокс.enabled=false, а после открытия формы придумать как его сделать доступным (получилось только по лишнему клику, не комильфо, может таймером?).

P.S. Manyasha ! :)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Среда, 04.03.2015, 16:30
 
Ответить
СообщениеТоже помню столкнулся с такой штукой, и на этом файле есть баг (и в 2010, и в 2003).
Чем тогда лечил - не помню... Да и вылечил ли..
Тут можно сделать ещё так - по умолчанию листбокс.enabled=false, а после открытия формы придумать как его сделать доступным (получилось только по лишнему клику, не комильфо, может таймером?).

P.S. Manyasha ! :)

Автор - Hugo
Дата добавления - 04.03.2015 в 16:29
Gustav Дата: Среда, 04.03.2015, 16:49 | Сообщение № 8
Группа: Админы
Ранг: Участник клуба
Сообщений: 2867
Репутация: 1208 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Интересно, что если столбец F увести с "линии огня", например, уменьшив ширину столбца E (Склад), то тоже всё хорошо становится. Можно, наверное, и c Top, Left формы поиграться в зависимости от Target.Top и Target.Left.

P.S. Вот здесь уже весьма успешно поигрались: http://www.excelworld.ru/forum/3-949-1#10525


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Среда, 04.03.2015, 17:01
 
Ответить
СообщениеИнтересно, что если столбец F увести с "линии огня", например, уменьшив ширину столбца E (Склад), то тоже всё хорошо становится. Можно, наверное, и c Top, Left формы поиграться в зависимости от Target.Top и Target.Left.

P.S. Вот здесь уже весьма успешно поигрались: http://www.excelworld.ru/forum/3-949-1#10525

Автор - Gustav
Дата добавления - 04.03.2015 в 16:49
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!