Создание Windows-приложений на основе Visual C#

         

Создание пользовательских (композитных) элементов управления. Элемент управления NumericUpDown


Одинаковая группа элементов с привязанными обработчиками может требоваться в нескольких частях большого приложения или даже нескольких приложений. Например, программы Microsoft Word и Excel содержат много одинаковых связанных элементов — панели инструментов, окна настроек, группы меню. Среда Visual Studio .NET предоставляет возможность создания функциональных блоков, состоящих из многих элементов; применение этих блоков позволяет значительно ускорить разработку приложений. Создаем новый проект в Visual Studio .NET — на этот раз выбираем шаблон Windows Control Library (рис. 3.11).


Рис. 3.11.  Проект UserInput, шаблон проекта — Windows Control Library

Появляется форма без границ, представляющая собой основу, на которой будут располагаться элементы. В принципе, можно разрабатывать функциональность и проверять код, компилируя проект при помощи пункта меню Build (Ctrl+Shift+B). Однако при этом мы не увидим результатов работы композитного элемента, пока не добавим его на другую форму. Поэтому на время разработки переделаем проект в Windows-приложение, а потом, когда все будет готово, вернем ему исходный вид. При попытке запустить приложение появляется сообщение "A project with an Output Type of Class Library cannot be started directly" (Проект с выходным типом Class Library (Библиотека классов) не может быть запущен непосредственно). В окне Solution Explorer щелкаем правой кнопкой на имени проекта UserInput и в появившемся контекстном меню выбираем Properties. В окне UserInput Property Pages изменяем значение свойства OutputType на Windows Application. Снова запускаем приложение. Появляется ошибка — приложение не содержит точки входа:

Program 'D:\Uchebnik\Code\Glava3\UserInput\obj\Debug \UserInput.exe' does not have an entry point defined

Добавляем метод Main в класс формы:

[STAThread] static void Main() { Application.Run(new UserControl1()); }

Снова запускаем приложение — появляются две ошибки:

1.D:\Uchebnik\Code\Glava3\UserInput\UserControl1.cs(44): The best overloaded method match for'System.Windows.Forms.Application.Run(System.Windows.Forms.Form)' has some invalid arguments


2.D:\Uchebnik\Code\Glava3\UserInput\UserControl1.cs(44): Argument '1': cannot convert from 'UserInput.UserControl1' to 'System.Windows.Forms.Form'

Класс UserControl1 наследует от класса UserControl:

public class UserControl1 : System.Windows.Forms.UserControl

Обычный класс Windows-приложения наследует от класса Form:

public class Form1 : System.Windows.Forms.Form

Закомментируем наследование этого класса (не удалим!) и добавим наследование от класса Form:

public class UserControl1 : System.Windows.Forms.Form

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

Займемся теперь созданием функциональности. Добавляем на форму три надписи, текстовое поле, ErrorProvider и элемент управления NumericUpDown (рис. 3.12):


Рис. 3.12.  Проект UserInput, расположение элементов управления на форме

Две надписи будут статичными, а на третью будут выводиться сообщения при ошибках. Установим свойству Name этой надписи значение lbloutput. Устанавливаем следующие значения текстового поля, элементов ErrorProvider и NumericUpDown:

textBox1, свойствоЗначение
NametxtName
Text
numericUpDown1, свойствоЗначение
NamenumUDAge
Maximum100
Minimum1
Value25
errorProvider1, свойствоЗначение
BlinkStyleAlwaysBlink
Icon
Code\Glava3\UserInput\Icon\none.ico


Проверять ввод значений будем в текстовом поле и элементе NumericUpDown. В окне Properties создаем обработчиков событий Validated элементов:





Листинг 3.4.

(html, txt)

Осталось добавить методы, в которых проверяются заданные значения:

private bool nameValid() { // Проверяем заполнение текствого поля return ( txtName.Text.Length > 0); }

private bool ageLess() { //Возраст меньше 25 return (numUDAge.Value < 25); }



private bool ageMore() { //Возраст больше 25 return (numUDAge.Value > 65 ); }

Запускаем приложение. При ошибках иконка мигает беспрерывно, в случае ее исправления сообщение исчезает (рис. 3.13):


Рис. 3.13.  Готовое приложение UserInput

Преобразуем теперь проект в композитный элемент, скомпилируем его в режиме Build (Ctrl+Shift+B) и закроем.

На диске, прилагаемом к книге, вы найдете приложение UserInput (Code\Glava3\UserInput).

on_load_lecture()

Дальше »

  Если Вы заметили ошибку - сообщите нам.  
Страницы:

« |

1

|

2

|

3

|

4

|

5

|

6

|

7

|

8

|

9

|

вопросы | »

|

учебники

|

для печати и PDA

Курсы | Учебные программы | Учебники | Новости | Форум | Помощь


Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru

© 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование



2.D:\Uchebnik\Code\Glava3\UserInput\UserControl1.cs(44): Argument '1': cannot convert from 'UserInput.UserControl1' to 'System.Windows.Forms.Form'

Класс UserControl1 наследует от класса UserControl:

public class UserControl1 : System.Windows.Forms.UserControl

Обычный класс Windows-приложения наследует от класса Form:

public class Form1 : System.Windows.Forms.Form

Закомментируем наследование этого класса (не удалим!) и добавим наследование от класса Form:

public class UserControl1 : System.Windows.Forms.Form

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

Займемся теперь созданием функциональности. Добавляем на форму три надписи, текстовое поле, ErrorProvider и элемент управления NumericUpDown (рис. 3.12):


Рис. 3.12.  Проект UserInput, расположение элементов управления на форме

Две надписи будут статичными, а на третью будут выводиться сообщения при ошибках. Установим свойству Name этой надписи значение lbloutput. Устанавливаем следующие значения текстового поля, элементов ErrorProvider и NumericUpDown:

textBox1, свойствоЗначение
NametxtName
Text
numericUpDown1, свойствоЗначение
NamenumUDAge
Maximum100
Minimum1
Value25
errorProvider1, свойствоЗначение
BlinkStyleAlwaysBlink
Icon
Code\Glava3\UserInput\Icon\none.ico


Проверять ввод значений будем в текстовом поле и элементе NumericUpDown. В окне Properties создаем обработчиков событий Validated элементов:

private void txtName_Validated(object sender, System.EventArgs e) { if(nameValid()) { // Все правильно, удаляем сообщение с надписи errorProvider1.SetError(txtName, ""); } else { //Поле не заполнено — выводим сообщение errorProvider1.SetError(txtName, "Name is required."); lbloutput.Text = "Введите имя!"; }



}

private void numUDAge_Validated(object sender, System.EventArgs e) { if (ageLess()) { // Введенное значение меньше 25 errorProvider1.SetError(numUDAge, "Age not old enough"); lbloutput.Text = " Введите значение, большее или равное 25"; } else if (ageMore()) { /// Введенное значение больше 25 errorProvider1.SetError(numUDAge, "Age is too old"); lbloutput.Text = "Введите значение, меньшее или равное 65"; } else { // Все правильно, удаляем сообщение с надписи errorProvider1.SetError(numUDAge, ""); }

}

Листинг 3.4.

Осталось добавить методы, в которых проверяются заданные значения:

private bool nameValid() { // Проверяем заполнение текствого поля return ( txtName.Text.Length > 0); }

private bool ageLess() { //Возраст меньше 25 return (numUDAge.Value < 25); }

private bool ageMore() { //Возраст больше 25 return (numUDAge.Value > 65 ); }

Запускаем приложение. При ошибках иконка мигает беспрерывно, в случае ее исправления сообщение исчезает (рис. 3.13):


Рис. 3.13.  Готовое приложение UserInput

Преобразуем теперь проект в композитный элемент, скомпилируем его в режиме Build (Ctrl+Shift+B) и закроем.

На диске, прилагаемом к книге, вы найдете приложение UserInput (Code\Glava3\UserInput).


Содержание раздела