Книга: C# для профессионалов. Том II

Базовые специальные элементы управления

Базовые специальные элементы управления

Как можно предположить из результатов предыдущего раздела, образец элемента управления, создаваемый по умолчанию, является версией стандартного элемента управления <asp:Labels>. Создаваемый в файле .cs код проекта, WebCustomControl1.cs, выглядит следующим образом:

namespace PCSCustomWebControls {
 using System;
 using System.Web.UI;
 using System.Web.UI.WebControls;
 using System.ComponentModel;
 /// <summary>
 /// Краткое описание WebCustomControl1
 /// </summary>
 [DefaultProperty("Text"),
 ToolboxData("<{0}WebCustomControl1 runat=server></{0}:WebCustomControl1>")]
 public class WebCustomControl1 : System.Web.UI.WebControls.WebControl {
  private string text;
  [Bindable(true), Category("Appearance"), DefaultValue(" ")]
  public string Text {
   get {
    return text;
   }
   set {
    text = value;
   }
  }
  /// <summary>
  /// Предоставить этот элемент управления указанному параметру вывода.
  /// </summary>
  /// <param name="output"> The HTML writer to write out to </param>
  protected override void Render(HtmlTextWriter output) {
   output.Write(Text);
  }
 }
}

Начальные инструкции using для пространств имен вполне стандартны.

Здесь определен единственный класс WebCustomControl1 (отметим, как имя класса отображается прямо в элемент ASP.NET в простом примере, только что увиденном), который является производным из класса WebControl, как обсуждалось ранее. Для этого класса предоставлены два атрибута: DefaultProperty и ToolboxData. Атрибут DefaultProperty определяет, какое свойство будет использоваться по умолчанию для элемента управления в языках, которые поддерживают эту функциональность. Атрибут ToolboxData точно определяет, какой код HTML будет добавлен к странице .aspx, если этот элемент управления добавляется с помощью инструментальной панели Visual Studio (когда проект откомпилирован, можно добавить элемент управления в панель инструментов, конфигурируя панель инструментов для использования созданной сборки).

Класс содержит одно свойство: Text. Это очень простое текстовое свойство, похожее на те, которые встречались раньше. Здесь необходимо отметить только три атрибута:

? Bindable — показывает, может ли свойство быть связано с данными.

? Category — задает, будет ли свойство выводиться на страницах свойств.

? DefaultValue — значение по умолчанию для свойства.

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

Остальная часть класса состоит из метода Render(). Это единственный самый важный метод для реализации при создании специальных элементов управления, так как в нем мы получаем доступ к потоку вывода для изображения содержимого элемента управления. Существует только два случая, когда этот метод не нужно реализовывать:

? Когда создается элемент управления, не имеющий визуального представления (обычно называемый компонентом).

? Когда создается производный элемент из существующего элемента управления и не требуется изменять характеристики его изображения.

Специальные элементы управления могут также предоставлять специальные методы, инициировать специальные события, и отвечать производным элементам управления (если они существуют). Ниже мы рассмотрим:

? Создание производных элементов управления

? Создание композитных элементов управления

? Создание более развитых элементов управления

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

Создадим для начала простой производный элемент управления.

Оглавление книги


Генерация: 3.027. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз