|
Создание унаследованных .NET компонентов в C# • Косметика
Наш компонент работает, но выглядит не очень презентабельно. В тулбоксе он отображается стандартной шестеренкой, авторство сборки не заявлено, документации нет никакой. С этим надо бороться. Начнем с документирования.
Открываем свойства проекта in3steps (двойной щелчок на соответствующем элементе в Solution Explorer) и на вкладке Build включаем XML documentation file. Имя XML файла и путь на него лучше не трогать - пусть лежит там же, где DLL сборки. Теперь идем на самое первое объявление в нашем файле DialogButton.cs, находим первое публичное объявление (в нашем случае это объявление класса DialogButton), встаем на строку выше объявления и три раза нажимаем прямую косую. Среда делает шаблон описания и любезно устанавливает курсор в нужное место. Вбиваем описание, идем ниже, делаем то же самое для метода GetText, спускаемся к CharCase проделываем то же самое для типа в целом и для каждой константы отдельно (помните, мы располагали их на отдельных строках?) и так далее до конца файла, не пропуская ни одного публичного описания. Если мы что-то забудем, среда при очередной компиляции напомнит нам о всех незадокументированных местах. После успешной компиляции все наши данные попадают в XML, по умолчанию лежащий там же, где и файл сборки. Из этого XML можно сделать CHM, но это почему-то очень и очень непросто, так что это тема для отдельного рассказа. Впрочем, надеюсь, что в ближайшее время я смогу указать очень простой путь от XML к CHM.
Итак, задокументировали. Компонент с технической точки зрения полностью завершен. Он работоспособен и документирован. Остается косметика. Начнем с заполнения данных сборки. У проекта in3steps раскрываем Properties и щелкаем два раза по AssemblyInfo.cs. В редакторе меняем все, что хотим, получаем что-то вроде этого:
[assembly: AssemblyTitle("in3steps")]
[assembly: AssemblyDescription("in3steps Example Assembly")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("greatis just4fun network & in3steps")]
[assembly: AssemblyProduct("DialogButton")]
[assembly: AssemblyCopyright("Copyright © 2008 in3steps.com")]
[assembly: AssemblyTrademark("in3steps")]
[assembly: AssemblyCulture("")]
|
Недурно было бы дать информацию программистам, то есть людям, которые сначала смотрят в исходники, а потом уже изредка в документацию. Добавляем комментарии в начало DialogButton.cs. Мы в Greatis Software обычно делаем это примерно так:
/* Creating Inherited C# Control Example
* Copyright (c) 2008 in3steps
* http://InheritedCSharpControl.in3steps.com/
*/
|
Теперь пришло время десерта. Нам нужно заменить грубую синюю шестеренку, которая используется по умолчанию для нашего нового компонента на что-то, что хоть немного будет намекать на его функциональность. Самое логичное - взять стандартную иконку Button и слегка изменить ее. Я не придумал ничего лучше, как просто заменить надпись с "ab" на "OK" (все равно больше ничего не поместится) и сделать надпись ярко-красной, чтобы хоть как-то дать понять, что эта надпись не обычная, а автоматическая. Сохраняем получившуюся картинку в DialogButton.bmp, не забывая, что цвет левого нижнего пиксела используется средой для определения прозрачного цвета. Добавляем эту картинку в проект in3steps (Правая кнопка - Add - Existing item...), щелкаем на добавленной картинке правой кнопкой мыши, выбираем Properties, и в свойствах картинки устанавливаем BuildAction в значение Embedded Resource. Идем в DialogButton.cs и перед объявлением класса DialogButton ставим атрибут ToolboxBitmap(typeof(DialogButton)). Делаем Rebuild всего решения. Всё! :)
|