Создание визуального контрола

Тема в разделе ".NET", создана пользователем AntonS1, 4 окт 2007.

Статус темы:
Закрыта.
  1. AntonS1

    AntonS1 Гость

    Здравствуйте. Программированием занимаюсь недавно.
    Мне необходимо реализовать свою компоненту(control) на основе существующей-Win32(ну или на крайняк - написать с 0).
    Т.е. дописать своего( !!!на C#!!! ). Подскажите с чего начать,
    и как это впринципе делается(вообще как создать компоненту, перехват событий,...).
    Хотелось бы подробнее. Есть в сети какой-нибудь материал по этому поводу(я ничего дельного не нашел просто, а реализовывать нужно скорее...)?
    Спасибо.
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Создаешь новый элемент в проекте - UserControl. Далее на этот контрол кидаешь компоненты, которые бы хотел на нем видеть, пишешь обработчики их событий. Далее остается этот контрол только на форму кинуть. Да, у VS есть какой-то глюк, из-за которого контрол не удается положить на форму, если он в одном с формой проекте. Иногда помогает пересборка, но если не помогает, то нужно контрол в отдельный проект вынести.
    Далее, свойства у контрола описываются точно так же, как у любого C#-класса. По поводу собственных событий контрола - почитай в MSDN про event и delegate.
    Потом, народная мудрость: при запуске формы, содержащей контрол, все свойства контрола получают значения по умолчанию. Т.е. твои свойства должны быть готовы к тому, что в первый раз им присвоят значение null (или 0, или еще чего, в зависимости от типа).
    Еще одна народная мудрость: при открытии контрола в дизайнере студия выполняет код, который содержится в его конструкторе и обработчике события Load. Если у тебя в этих местах выполняется какое-нибудь чтение файлов, подключение к БД и т.п., то надо добавить проверку свойства DesignMode (так вроде) контрола, чтобы при открытии в дизайнере этот код не выполнялся. Иначе контрол может не открываться.

    Создаешь новый элемент в проекте - UserControl. Далее на этот контрол кидаешь компоненты, которые бы хотел на нем видеть, пишешь обработчики их событий. Далее остается этот контрол только на форму кинуть. Да, у VS есть какой-то глюк, из-за которого контрол не удается положить на форму, если он в одном с формой проекте. Иногда помогает пересборка, но если не помогает, то нужно контрол в отдельный проект вынести.
    Далее, свойства у контрола описываются точно так же, как у любого C#-класса. По поводу собственных событий контрола - почитай в MSDN про event и delegate.
    Потом, народная мудрость: при запуске формы, содержащей контрол, все свойства контрола получают значения по умолчанию. Т.е. твои свойства должны быть готовы к тому, что в первый раз им присвоят значение null (или 0, или еще чего, в зависимости от типа).
    Еще одна народная мудрость: при открытии контрола в дизайнере студия выполняет код, который содержится в его конструкторе и обработчике события Load. Если у тебя в этих местах выполняется какое-нибудь чтение файлов, подключение к БД и т.п., то надо добавить проверку свойства DesignMode (так вроде) контрола, чтобы при открытии в дизайнере этот код не выполнялся. Иначе контрол может не открываться.
     
  3. chm

    chm Гость

    С нуля лучше не писать - слишком рутинно. Обычно требуется добавить нечто в уже существущий класс контролса. Для этого создается новый класс, наследуемый от оригинального класса формы. В нем можно использовать protected методы и свойства из родительского класса (см. MSDN класс-все члены). Если этого не достаточно, то можно дописать свои свойства, методы, события. Примеров по этой теме в инете выложено море. VS не использую.
     
  4. Pasha

    Pasha Гость

    Для: chm
    Это топик месячной давности.
     
  5. chm

    chm Гость

    <!--QuoteBegin-sax_ol+16:11:2007, 12:51 -->
    <span class="vbquote">(sax_ol @ 16:11:2007, 12:51 )</span><!--QuoteEBegin-->А что?
    [snapback]86068" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    gvim 7.1 :)
     
  6. Pasha

    Pasha Гость

    Суровый челябинский разработчик.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей