Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка Windows Forms > SrollBar & ClientRectangle |
Автор: skhilkov 27.7.2011, 07:44 |
Привет ) Сегодня наткнулся на интересную вещь: есть у меня CheckedListbox, мне нужно проверять событие клика мыши на нем: попал или нет. Использую чекЛистБокс.ClientRectangle.Contains(e.Location) Интересное начинается если у литбокса появляется скроллбар. ClientRectangle как я прочитал, не захватывает границы, скроллбары и тому подобное, как выход, конечно, можно попробовать добавлять ширину скроллбара к клиентской области, НО таких чеклистбоксов у меня много, и я не могу знать где есть скролл а где его нет, по крайней мере я не нашел как это определить. Может кто знает бубны на этот случай? )) |
Автор: skhilkov 27.7.2011, 09:32 |
Самое обидное - это то, что у чекЛистбокса есть свойство HorizontalScrollBar, но нет свойства VerticalScrollBar |
Автор: mr.DUDA 27.7.2011, 11:45 | ||
(Кулхацкер моде он) Пишем свой наследник от CheckedListBox:
В коде .Designer.cs формы заменяем CheckedListBox на MyCheckedListBox. Подписываемся на событие MouseClick чекедлистбокса. Профит! (кулхацкер моде офф) |
Автор: skhilkov 27.7.2011, 16:28 | ||
не понял как это должно работать, но все равно попытался - не работает ) Хотя, может я чего-то не догнал.. Мне надо чтобы в обработчике нажатия мыши работал этот код:
или работал любой другой код, который бы определял: попал я мышкой в чекедлистбокс(включая скролл) или нет.. |
Автор: mr.DUDA 27.7.2011, 18:35 | ||
skhilkov, если пришло в обработчик MouseClick, то условие ClientRectangle.Contains(e.Location) по-любому уже выполнено, зачем его ещё раз отдельно проверять? Код:
Проект в аттаче. |
Автор: skhilkov 27.7.2011, 18:56 | ||
mr.DUDA, В том-то и дело, что не приходит. Дело в том, что обработчик мыши срабатывает в любом случае, потому как у чекЛистбокса установлено Capture=true, поэтому и проверяю попал или не попал, если не попал - чекЛистбокс прячу. И вот тут(!) происходит этот прикол - когда я хочу прокрутить чекЛистбокс, то при клике на его скролбар, он пропадает, потому как не выполняется
Вот я и хочу понять как мне эту ситуевину разрулить. |
Автор: skhilkov 23.8.2011, 14:31 |
Попробовал примерно высчитать есть ли в данный момент скролл у чекедлистбокса исходя из количества айтемов, вроде получилось... Теперь осталась одна проблема - при клике на полосу прокрутки лист не закрывается, но и полоса не прокручивается, так как у листа Capture все время true... Это еще раз доказывает, что скроллбар существует как-то отдельно от самого компонента... |