• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы AntonS1
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

AntonS1

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

LuMee

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

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

chm

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

Pasha

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

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 :)
 
P

Pasha

Суровый челябинский разработчик.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!