Чтение онлайн

ЖАНРЫ

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

Затем разместите элемент Label (с названием lblControlInfo) вне контекста Panel, чтобы отображать соответствующий вывод. Учтите в Page_Load то, что мы хотим получить список всех элементов управления, содержащихся в Panel, и присвоить полученные результаты типу Label.

public partial class _Default: System.Web.UI.Page {

 protected void Page_Load(object sender, EventArgs e) {

ListControlsInPanel;

 }

 private void ListControlsInPanel {

string theInfo;

theInfo = String.Format("Присутствие элементов: {0}‹br›", myPanel.HasControls);

foreach (Control
с in myPanel.Controls) {

if (c.GetType != typeof(System.Web.UI.LiteralControl)) {

theInfo += "***************************‹br›";

theInfo += String.Format("Name = {0}‹br›", с.ToString);

theInfo += String.Format("ID = {0}‹br›", c.ID);

theInfo += String.Format("Visible = {0}‹br›", c.Visible);

theInfo += String.Format("ViewState = {0}‹br›", c.EnableViewState);

}

}

lblControlInfo.Text = theInfo;

 }

}

Здесь выполняется цикл по всем типам WebControl, поддерживаемым в Panel, и осуществляется проверка того, что текущий тип не является типом System.Web.UI.LiteralControl. Этот тип используется для представления буквальных HTML-дескрипторов и содержимого (например, ‹br›, текстовых литералов и т.д.). Если вы не выполните такой проверки, вы с удивлением можете обнаружить в контексте Panel целых семь типов (для указанного выше определения *.aspx). В предположений о том, что тип не является буквальным HTML-содержимым, выводится определенная статистическая информация, Пример такого вывода показан на рис. 23.20.

Рис. 23.20. Перечень вложенных элементов

Динамическое добавление (и удаление) элементов управления

Но что делать, если нужно изменить содержимое Panel в среде выполнения? Соответствующий процесс должен показаться вам очень знакомым, если вы внимательно прочитали материал книги, посвященный работе с Windows Forms. Давайте добавим в текущую страницу кнопку (с названием btnAddWidgets), которая будет динамически добавлять в Panel пять новых типов TextBox, и еще одну кнопку, которая будет выполнять очистку Panel от всех элементов управления. Обработчики событий Click для этих кнопок приведены ниже.

protected void btnAddWidgets_Click(object sender, EventArgs e) {

 for (int i = 0; i ‹ 5; i++) {

// Назначение имени, чтобы позже получить соответствующее

// текстовое значение с помощью метода

// HttpRequest.QueryString.

TextBox t = new TextBox;

t.ID = string.Format("newTextBox{0}", i);

myPanel.Controls.Add(t);

ListControlsInPanel;

 }

}

protected void btnRemovePanelItems_Click(object sender, EventArgs e) {

 myPanel.Controls.Clear;

 ListControlsInPanel;

}

Обратите внимание на то, что каждому TextBox назначается уникальное значение ID (newTextBox1, newTextBox2 и т.д.), чтобы можно было программными средствами получить содержащийся в этих элементах текст, используя коллекцию HttpRequest.Form (как будет показано чуть позже).

Чтобы получить значения этих динамически генерируемых типов TextBox, добавьте в пользовательский интерфейс еще один тип Button и тип Label. В пределах обработчика события Click для Button реализуйте цикл по всем элементам, содержащимся в рамках типа HttpRequest.NameValueCollection (доступного с помощью HttpRequest.Form), добавляя полученную текстовую информацию к локальному типу System.String. По завершении обработки

коллекции назначьте эту строку свойству Text нового элемента Label с именем lblTextBoxText.

protected void btnGetTextBoxValues_Click(object sender, System.EventArgs e) {

 string textBoxValues = "";

 for(int i = 0; i ‹ Request.Form.Count; i++) {

textBoxValues += string.Format("‹li›{0}‹/li›‹br›", Request.Form[i]);

 }

 lblTextBoxText.Text = textBoxValues;

}

Запустив приложение, вы сможете увидеть как содержимое текстовых блоков, так и довольно длинные ("нечитаемые") строки. Такие строки отражают визуальное состояние элементов на странице и будут рассматриваться позже, в следующей главе. Также вы заметите, что после обработки запроса новые текстовые окна исчезают. Причина опять кроется в природе HTTP – этот протокол не обеспечивает сохранения состояния. Чтобы динамически созданные типы TextBox сохранялись после вторичных запросов, вы должны сохранить состояния этих объектов, используя соответствующие приемы программирования ASP.NET (эти вопросы также рассматриваются в следующей главе).

Исходный код. Файлы примера DynamicCtrls размещены в подкаталоге, соответствующем главе 23.

Основные члены типа System.Web.Ul.WebControls.WebControl

Можно сказать, что тип Control предлагает возможности поведения, не относящиеся к графическому интерфейсу. С другой стороны, базовый класс WebControl обеспечивает полиморфный графический интерфейс для всех Web-элементов поведения, как показано в табл. 23.10.

Таблица 23.10. Свойства базового класса WebControl

Свойства Описание
BackColor Читает или устанавливает цвет фона Web-элемента управления
BorderColor Читает или устанавливает цвет границы Web-элемента управления
BorderStyle Читает или устанавливает стиль границы Web-элемента управления
BorderWidth Читает или устанавливает ширину границы Web-элемента управления
Enabled Читает или устанавливает значение, являющееся индикатором доступности Web-элемента управления
СssСlass Позволяет назначить Web-элементу управления класс, определенный в рамках CSS (Cascading Style Sheet – каскадная таблица стилей)
Font Читает информацию о шрифте для Web-элемента управлений
ForeColor Читает или устанавливает цвет изображения (обычно цвет текста) для Web-элемента управления
Height Width Читает или устанавливает высоту и ширину Web-элемента управления
TabIndex Читает или устанавливает индекс перехода по табуляции для Web-элемента управления
ToolTip Читает или устанавливает значение-индикатор, указывающее необходимость отображения подсказки при задержке указателя мыши на изображении Web-элемента управления 

Скорее всего, эти свойства будут для вас понятны, так что вместо примеров их использования давайте немного сместим акценты и проверим в действии ряд элементов управления Web-формы ASP.NET.

Категории Web-элементов управления ASP.NET

Типы в System.Web.UI.WebControls можно разбить на несколько больших категорий.

Простые элементы управления

Элементы управления с расширенными возможностями

Поделиться с друзьями: