Программирование >>  Программирование с использованием ajax 

1 ... 164 165 166 [ 167 ] 168 169 170 ... 396



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

Щелкните на поверхности проектирования и откройте свойства элемента управления. Измените значение свойства name элемента управления на

ctlLabelTextbox.

Дважды щелкните на элементе управления Label в панели инструментов Toolbox, чтобы добавить его в создаваемый элемент управления, поместив в верхнем левом углу поверхности. Измените значение его свойства Name на IblTextBox. Установите Label в качестве значения свойства Text.

Дважды щелкните на элементе TextBox в панели инструментов Toolbox, чтобы добавить его в создаваемый элемент управления. Измените значение его свойства Name на txtLabelText.

Во время проектирования неизвестно, как пользователь пожелает разместить эти элементы управления, поэтому нам придется написать код, который будет позиционировать элементы управления Label и TextBox. Этот же код будет определять позицию элементов управления при помещении элемента управления LabelTextbox в форму.

Как видно на рис. 16.17, дизайн элемента управления выглядит как угодно, но не ободряюще - мало того, что элемент управ-Рис 16 17 Дизайн -ния TextBox заслоняет часть надписи, так еще и поверхность

* * всего составного элемента управления слишком велика. Однако

элемента управления

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

Вначале позиционируем элементы относительно друг друга. Пользователь должен иметь возможность выбора способа размещения элементов управления, и поэтому мы добавим к элементу управления не одно, а два свойства. Свойство Position позволяет пользователю выбирать одну из двух опций: Right (Справа) и Below (Внизу). Если пользователь выбирает опцию Right, в дело вступает еще одно свойство. Оно называется TextboxMargin, и его значение - значение типа int, которое представляет количество пикселей между левым краем элемента управления и позицией размещения элемента управления TextBox. Если пользователь указывает значение О, при размещении правый край элемента управления TextBox выравнивается по правому краю элемента управления.

Добавление свойств

Чтобы предоставить пользователю возможность выбора между опциями Right и Below, начните с определения перечисления этих двух значений. Вернитесь к проекту элемента управления, перейдите в редактор кода и добавьте следующий код:

public partial class ctlLabelTextbox : UserControl {

Перечисление двух возможных позиций

public enum PositionEnum

Right, Below



Затем добавьте свойство Position следующим образом:

public PositionEninn Position {

return mPosition;

set {

mPosition = value; MoveControlsO ;

Это свойство добавляется в класс подобно любому другому свойству. Если требуется вернуть свойство, мы возвращаем поле-член mPosition; если же требуется изменить значение свойства Position, мы присваиваем значение mPosition и вызываем метод MoveControls (). Несколько позже мы вернемся к рассмотрению метода MoveControls О - а пока достаточно знать, что этот метод позиционирует два элемента управления, анализируя значения mPosition и mTextboxMargin.

Свойство TextboxMargin аналогично предыдущему, за исключением того, что оно работает с целочисленным значением:

public int TextboxMargin {

get {

return mTextboxMargin;

set {

mTextboxMargin = value; MoveControls();

Добавление обработчиков событий

Прежде чем приступить к тестированию двух описанных свойств, нужно добавить также два обработчика событий. При помещении элемента управления в форму вызывается событие Load. Это событие нужно применять для инициализации элемента управления и любых ресурсов, которые он может использовать. Обработка этого события выполняется для перемещения элемента управления и для изменения его разме-

Это всего лишь обычное перечисление, описанное в главе 5. А теперь, что касается магии : позиция должна быть свойством, которое пользователь сможет устанавливать как посредством кода, так и с помощью визуального конструктора. Мы достигнем этого посредством добавления свойства в класс ctlLabelTextbox. Однако вначале нужно создать два поля-члена, которые будут содержать значения, выбираемые пользователем:

Поле-член, которое будет содержать эначе1шя, выбираемые пользователем private PositionEninn mPosition = PositionEninn.Rights-private int mTextboxMargin = 0 ;

public CtlLabelTextbox0



ров так, чтобы он аккуратно охватывал два содержащихся в нем элемента управления. Второе добавляемое событие - SizeChanged. Оно вызывается при каждом изменении размеров элемента управления, и его обработка требуется для обеспечения правильной своей прорисовки самим элементом управления. Выберите элемент управления и добавьте два события: SizeChanged и Load. Затем добавьте обработчики событий:

private void ctlLabelTextbox Load(object sender, EventArgs e) {

IblTextBox.Text = this.Name; Добавление текста к надписи

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

this.Height = txtLabelText.Height > IblTextBox.Height ?

txtLabelText .Height : IblTextBox.Height; MoveControls(); Перемещение элементов управления.

private void ctlLabelTextbox SizeChanged(object sender. System.EventArgs e) {

MoveControls();

И снова мы вызываем метод MoveControls () для позиционирования элементов управления. Теперь, прежде чем снова проверять созданный элемент управления, пора рассмотреть этот метод:

private void MoveControls () {

switch (mPosition) {

case PositionEninn.Below:

Помещение верхнего края Textbox непосредственно под надписью, this.txtLabelText.Top = this.IblTextBox.Bottom; this.txtLabelText.Left = this.IblTextBox.Left;

Изменение ширины Textbox, чтобы она была равна ширине элемента управления.

this. txtLabelText. Width = this.Width;

this.Height = txtLabelText.Height + IblTextBox.Height;

break;

case PesitionEninn.Right:

Установка верхнего края Textbox на одном уровне с верхним краем някдписи. txtLabelText.Тор = IblTextBox.Тор;

Если ширина гранихд! равна нулю, текстовое поле будет помещено непосредственно рядом с надписью, if (mTextboxMargin = 0) {

int width = this.Width-lblTextBox.Width-3; txtLabelText.Left = IblTextBox.Right + 3; txtLabelText. Width = width;

else

Если ширина гранихд! не равна нулю, текстовое поле помещается там, где указал пользователь. txtLabelText. Left = mTextboxMargin; txtLabelText. Width = this .Right-mTextboxMargin;

this.Height = txtLabelText.Height > IblTextBox.Height ?

txtLabelText.Height : IblTextBox.Height;

break;



1 ... 164 165 166 [ 167 ] 168 169 170 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика