Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

создание компонента со своими обработчиками событий в design mode

25K
13 февраля 2007 года
none
4 / / 13.02.2007
Если унаследовать от UserControl, то компонент будет иметь свой Handle (hwnd), обработчики события от мыши, клавиатуры, на прорисовку, drag and drop реализованные уже в design mode (то есть в этом режиме компонент можно будет перетаскивать мышкой и будут меняьтся при этом его координаты или размер). А мне надо сделать компанент который будет сам определять когда нажата клавиша и какому компаненту отправить очередное событие от мыши или клавиатуры в том же design mode.

Может надо переписывать класс Control? а где тогда доки по его внутренностям или хотя бы исходники взять? Или как-то по другому можно сделать?
273
15 февраля 2007 года
3A3-968M
1.2K / / 22.12.2005
Наследуйся от UserControl. Если нужно изменить поведение событий, переопредели защищённые виртуальные методы OnDragDrop, OnClick, OnMouseOver и т.д..
25K
20 февраля 2007 года
none
4 / / 13.02.2007
Спасибо за дельный совет. в общем помогло.
25K
21 февраля 2007 года
none
4 / / 13.02.2007
Попутно возник такой вопрос. От чего наследовать, чтобы получить компонент наподобии timer (он никак не отображается на форме). с другой стороны мне надо чтобы добавление такого компанента на панель или форму (на контейнеры одним словом) вызывало событие ControlAdded.
273
21 февраля 2007 года
3A3-968M
1.2K / / 22.12.2005
Цитата: none
Попутно возник такой вопрос. От чего наследовать, чтобы получить компонент наподобии timer (он никак не отображается на форме). с другой стороны мне надо чтобы добавление такого компанента на панель или форму (на контейнеры одним словом) вызывало событие ControlAdded.


Таймер из ВинФорма наследуется не от Control, а от Component, т.е. не является элементом управления, а является компонентом. Разница в том, что компонент не является визуальным элементом управления, как следствие, не имеет своего хэндла и прочей атрибутики. Отсюда следует, что КОМПОНЕНТ НЕ ДОЛЖЕН (И НЕ МОЖЕТ) ДОБАВЛЯТЬСЯ В КОНТЕЙНЕРНЫЕ ИЛИ ИНЫЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ. Как видишь, у коллекции Controls метод Add принимает только экземпляры от Control а не от Component. Исходя из всего этого, зачем делать пользовательский контрол, который не имеет прорисовки??? Из этого вопроса и вытекает ответ на твой вопрос. Возникновение события ControlAdded не имеет смысла, т.к. неграфический контрол попросту никто на форму добавлять не будет.

25K
22 февраля 2007 года
none
4 / / 13.02.2007
Ага. понятно. Объясняю зачем делать пользовательский контрол, который не имеет прорисовки: Дело в том, что прорисовку этот контрол имеет, но не средствами GDI (то есть то что делается через Handle), а посредством DirectX, который инициализируется в контейнерном элементе управления. в последнем заложена функциональность для прорисовки контролов, которые в него добавляются.
Я думаю, что это не совсем правильно, если я буду наследовать от Control, потому что он создаёт для себя Handle и постоянно вызывает OnPaint. лишняя память для handle (а это дескриптор окна, который возможно и видеопамять тоже занимает), и лишний вызов для прорисовки, который мне в принципе не нужен.
Может быть стоит дополнить каким-нибудь образом функциональности к классу Component или может быть переопределить метод Add?
273
22 февраля 2007 года
3A3-968M
1.2K / / 22.12.2005
От Component напрямую наследоваться нельзя, т.к. на другие контролы добавлять твой не получится. Об этом я уже говорил. Хэндл - ну и пусть будет, занимает он всего 4 байта. Видеопамять выделяется только для GDI объектов, которые ты не создаёшь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог