in3steps.com Articles   Languages   Authors   Affiliate   Search   About us
Создание унаследованных .NET компонентов в C#  •  Скелет

Visual Studio .NET предлагает массу различных компонентов, которые перекрывают львиную долю задач, но всегда хочется чего-то особенного. Более функционального, более простого в использовании, более красивого компонента. Создание новых компонентов в Visual Studio - очень простое дело, хоть и сопряженное подчас с некоторыми неудобствами и нелогичными решениями. Тем не менее, мы сейчас увидим, как за три простых шага можно создать полноценный пользовательский компонент. Итак, начинаем.

Для начала надо придумать, что именно мы собираемся реализовать. Я очень долго думал, и не придумал ничего лучше кнопки для диалоговых окон, которая сама меняет надпись на себе в завимости от свойства DialogResult. Ценность такого компонента, конечно, более чем сомнительна, но для примера сойдет... Теперь, когда мы поставили себе стратегическую задачу, и уже знаем, что мы хотим делать, самое время обратиться к тактике и узнать, как мы достигнем наших высоких целей.

Прежде всего надо создать решение, solution, этакий метапроект, содержащий в себе несколько других проектов. В меню Visual Studio выбираем File | New | Project... В появившемся окне выбираем Windows Control Library, вводим имя (я ввел in3steps), указываем путь для сохранения файлов и жмем ОК. Открывается редактор, в котором мы видим файлы, любезно созданные для нас средой. Смотрим на Solution Explorer, находим UserControl1.cs и переименовываем его во что-то более понятное. Я выбрал красивое имя DialogButton.

Теперь открываем это файл и смотрим, что у него внутри. Внутри у него много чего ненужного. В частности, по умолчанию Visual Studio создает пользовательские компоненты с ключевым словом partial, то есть реализованные в двух отдельных файлах. Это сделано, наверное, для сложных компонентов, где среда дает возможность вставлять компоненты в компоненты при помощи визуального редактора форм. У нас обычная кнопка, которая никогда не будет содержать никаких других компонентов, так что эти кудри нам ни к чему. Удаляем DialogButton.Designer.cs из проекта, удаляем слово partial из объявления класса, заменяем в базовом типе UserControl на Button, убираем вызов InitializeComponent() из конструктора. Скелет нашего компонента готов:

namespace in3steps
{
  public class DialogButton : Button
  {
    public DialogButton()
    {
    }
  }
}

Конечно, сейчас это просто копия стандартной кнопки, но все равно хочется посмотреть на нее и убедиться в том, что мы все сделали правильно. Жмем F5, среда задумывается и выдает ошибку, говоря о том, что в нашем решении отсутствуют пользовательские компоненты. Жаль. Так хотелось бы, чтобы для компонентов, унаследованных от Button и прочих из стандартного набора, запускался бы автоматический и удобный TestContainer, который запускается для потомков UserControl. Не судьба. Придется делать тестовое приложение самим.

В меню Visual Studio жмем File | New | Рroject... В открывшемся окне выбирам WindowsApplication, вводим какое-нибудь осмысленное имя, например, Test, в элементе Solution выбираем Add to Solution, чтобы новый проект добавился в наше текущее решение и жмем ОК. Теперь находим наш новый проект Test в окне Solution Explorer, щелкаем правой кнопкой и выбираем в меню Set as StartUp Project, чтобы именно этот проект запускался по умолчанию. Экономим силы и больше ничего не переименовывам, так как этот проект нам нужен только для тестирования нашей кнопки.

Теперь находим в окне Solution Explorer файл Form1.cs, щелкаем на нем два раза, чтобы открыть редактор форм, ищем закладку in3step Components и ставим на форму наш новый компонент DialogButton. После чего жмем F5 и наконец-то любуемся нашей кнопкой, которая пока, впрочем, отличается от стандартной только именем класса. Как сделать так, чтобы она отличалась еще чем-то, мы узнаем в следующем шаге.

 • justaman  • 

Начало  •  Следующий шаг  •  Скачать код примера  •  English


See also
Greatis Software
MegaDetailed.NET
Search for more →
 

greatis just4fun network