Файлы к лабораторной работе Вы можете скачать
здесь.
В данной лабораторной работе мы рассмотрим некоторые возможности
интегрированной среды разработки программного обеспечения
( IDE - Integrated Development
Environment ) Visual Studio.NET 2005. Мы будем
использовать разработанный корпорацией Microsoft самый красивый
и современный язык программирования C# (Си-шарп). Мы будем
опираться на мощную библиотеку классов .NET Framework ( FCL -
Framework Class Library, она же BCL -
Basic Class Library).
Создание заготовки приложения
-
Выполните
команду File/New/Project оболочки для создания нового проекта
-
В
диалоговом окне New Project выберите кнопкой Browse папку
для размещения проекта, задайте тип, шаблон и имя проекта WinFormsApp
После щелчка на кнопке OK мастер создаст
заготовку приложения и выведет в режиме дизайна пустую форму,
которая при запуске приложения будет представлять окно. Стандартный
размер сгенерированной формы равен 300x300.
Сделаем эту форму стартовой и разместим на ней элементы управления
для вызова дочерних форм, реализующих отдельные упражнения
данной работы.
-
Откройте
панель Solution Explorer оболочки и переименуйте файл Form1.cs в файл Start.cs
-
Щелкните
на форме правой кнопкой мыши и выполните команду контекстного
меню View Em, чтобы вызвать представление файла Start.cs в режиме редактора кода
-
В
режиме кода вызовите комбинацией клавиш Ctrl-F
окно Find and Replace для замены всех
вхождений Form1 на Start.
После заполнения полей поиска и замены щелкните на кнопке Replace All
-
В
раскрывающемся списке Members выделите функцию InitializeComponent(),
чтобы быстро позиционироваться в соответствующее место
кода
-
Отредактируйте
в функции InitializeComponent() код
установки заголовка окна в режиме выполнения
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Lab38 - Снетков";
}
Листинг
25.1.
Замена кода установки заголовка окна в режиме выполнения
Установка пароля на главное окно приложения
Теперь давайте добавим к главной форме Start код
поддержки пароля при запуске приложения. Для этого нам потребуется
диалоговое окно с текстовым полем. Сконструируем его. Создание
диалогового окна будет состоять из трех шагов:
- Создание самой формы диалогового окна (класс InputPassword )
- Размещение на форме интерфейсных элементов пользователя
- Создание кода, управляющего диалоговым окном
-
В
панели Solution Explorer выделите корневой
узел проекта и командой Add/Windows Form добавьте
в проект файл формы с именем InputPassword.cs
-
Удалите
из узла References лишние добавленные
мастером ссылки на библиотечные сборки System.Data и System.Xml
-
Откройте
файл InputPassword.cs в режиме View
Code и удалите инструкции using подключения
пространств имен System.Data и System.Xml
-
Настройте
форму InputPassword в соответствии с таблицей
Таблица свойств формы InputPassword
Свойство |
Значение |
Пояснения |
StartPosition |
CenterScreen |
Открывать в центре экрана |
FormBorderStyle |
FixedDialog |
Запретить пользователю менять размер |
MaximizeBox |
false |
Отключить системную кнопку развертывания
|
MinimizeBox |
falseStandardDialogs |
Отключить системную кнопку свертывания |
ShowInTaskbar |
false |
Запретить появление в панели задач |
AutoSize |
true |
Подстраиваться под содержимое |
AutoSizeMode |
GrowAndShrink |
Подстраиваться под содержимое (расширяться и сжиматься) |
Text |
Пусто |
Заголовок окна |
-
Из
свитка Containers панели инструментов Toolbox поместите
на форму компоновочную панель FlowLayoutPanel и
настройти ее в соответствии с таблицей
Таблица свойств компоновочной панели FlowLayoutPanel
Свойство |
Значение |
Пояснения |
Name |
flow |
Имя компоновочной панели |
AutoSize |
true |
Подстраиваться под содержимое |
FlowDirection |
TopDown |
Размещать сверху вниз |
WrapContents |
false |
Не переносить дочерние элементы в следующий столбец |
Padding.All |
8 |
Внутренний отступ дочерних элементов по периметру окна |
Dock |
Fill |
Распахнуть на всю клиентскую область родителя (формы) |
Эта панель будет автоматически следить за размещением своих
дочерних элементов в соответствии с настройками.
-
Выделите
на форме компоновочную панель flow, чтобы
именно она принимала дочерние элементы, поместите в нее
из свитка Common Controls текстовую метку Label и
настройте ее свойства в соответствии с таблицей
Таблица свойств текстовой метки Label
Свойство |
Значение |
Пояснения |
Name |
lblMessage |
Имя текстовой метки |
AutoSize |
true |
Подстраиваться под содержимое |
Anchor |
None |
Расположить посредине |
Margin.All |
8 |
Отступ по наружному периметру текстовой метки |
-
Аналогичным
образом поместите в панель flow последовательно
экземпляры компонентов TextBox и Button,
которые настройте так
Таблица свойств поля ввода TextBox
Свойство |
Значение |
Пояснения |
Name |
txtInput |
Имя текстовой метки |
Anchor |
None |
Расположить посредине |
Margin.All |
8 |
Отступ по наружному периметру текстовой метки |
PasswordChar |
* |
Эхо ввода в текстовом поле |
Таблица свойств кнопки Button
Свойство |
Значение |
Пояснения |
Name |
btnOk |
Имя кнопки |
AutoSize |
true |
Подстраиваться под содержимое |
Anchor |
None |
Расположить посредине |
Margin.All |
8 |
Отступ по наружному периметру кнопки |
Text |
OK |
Надпись |
DialogResult |
OK |
Назначить статус "кнопки OK" в родительской
форме |
Свойству дочерних кнопок формы DialogResult можно
присвоить любое значение из перечисления System.Windows.Forms.DialogResult ( Abort, Cancel, Ignore, No, None, OK, Retry, 25_73 ).
Оно и будет возвращено функцией ShowDialog() формы,
если пользователь выберет именно эту кнопку. Если свойству DialogResult кнопки
будет присвоен статус, отличный от None,
то при щелчке пользователя на такой кнопке форма будет автоматически
закрываться.
-
Подтяните
низ формы до приемлемого размера, чтобы она стала выглядеть
примерно так
-
Откройте
файл InputPassword.cs в режиме View
Designer, щелкните на заголовке формы и выполните
команду Format/Lock Controls, чтобы защитить
интерфейс формы от случайных изменений. Это групповая команда,
которая устанавливает свойство Locked всех
дочерних визуальных элементов и самой формы в значение True.
То же самое можно сделать индивидуально для каждого элемента
через меню Properties
Мы создали сам пользовательский интерфейс класса InputPassword диалогового
окна. Теперь нужно настроить класс InputPassword,
добавив туда метод создания диалогового окна и вызова его
на экран.
-
Модифицируйте
класс InputPassword следующим образом
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace WinFormsApp
{
public partial class InputPassword : Form
{
public InputPassword()
{
InitializeComponent();
}
public InputPassword(string windowTitle, string message)
{
InitializeComponent();
this.Text = windowTitle;
lblMessage.Text = message;
}
public static string Show(string windowTitle, string message)
{
using(InputPassword inputDlg =
new InputPassword(windowTitle, message))
{
inputDlg.ShowDialog();
return inputDlg.txtInput.Text;
}
}
}
}
Листинг
25.2.
Класс диалогового окна InputPassword в файле InputPassword.cs
Мы создали параметризованный конструктор для ввода заголовков
диалогового окна в момент его создания. Мы добавили статический
метод создания диалогового окна, который возвращает значение
текстового поля после щелчка пользователем на кнопке, и такой
метод нужно вызывать по имени класса. Упаковка создания экземпляра
формы в блок using позволяет вызвать сборщик
мусора сразу после выхода из этого блока.
Теперь нужно поместить вызов окна запроса пароля в обработчик
события Load запуска формы.
-
Откройте
файл Start.cs в режиме View Designer,
выделите форму через ее заголовок, перейдите в панель Properties,
установите ее в режим Events, найдите
событие Load и создайте для него обработчик Start_Load().
Заполните обработчик события так
private void Start_Load(object sender, System.EventArgs e)
{
string password = InputPassword.Show(
"Окно аутентификации пользователя",
"Просим ввести Ваш пароль:");
if (password != "root")// Плохой способ хранения пароля
{
MessageBox.Show(
"Извините, но Вам не разрешено\n" // Сообщение
+ "пользоваться этой суперпрограммой!!!",
"Неверный пароль", // Заголовок окна
MessageBoxButtons.OK, // Кнопка OK
MessageBoxIcon.Stop);// Критическая иконка
this.Close();
}
}
Листинг
25.3.
Обработчик события начальной загрузки главной формы Start приложения
-
Запустите
приложение, диалоговое окно ввода пароля должно
выглядеть так
При неправильном пароле появляется простое диалоговое окно
сообщений
и приложение завершит свою работу.