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