- •Оглавление
- •Введение
- •Общие положения
- •Структура рабочего стола среды программирования
- •Главное окно
- •Некоторые замечания
- •О рабочем столе
- •О справочной системе Help
- •Структура программ в VC++
- •Переход к созданию консольного приложения
- •Программа с оператором while
- •Имена и типы переменных
- •Оператор while
- •Оператор for
- •Символические константы
- •Глава 2. Программы для работы с символьными данными
- •Программа копирования символьного файла. Вариант 1
- •Программа копирования символьного файла. Вариант 2
- •Подсчет символов в файле. Вариант 1
- •Подсчет символов в файле. Вариант 2
- •Подсчет количества строк в файле
- •Подсчет количества слов в файле
- •Глава 3. Работа с массивами данных
- •Одномерные массивы
- •Многомерные массивы
- •Глава 4. Создание и использование функций
- •Создание некоторых функций
- •Ввод строки с клавиатуры
- •Функция выделения подстроки из строки
- •Функция копирования строки в строку
- •Внешние и внутренние переменные
- •Область действия переменных
- •Как создать свой внешний файл
- •Атрибут static
- •Рекурсивные функции
- •Некоторые итоговые данные по изучению функций
- •Перегрузка функций
- •Использование шаблонов функций
- •Создание простого шаблона функции
- •Шаблоны, которые используют несколько типов
- •Глава 5. Функции для работы с символьными строками
- •Основные стандартные строковые функции
- •Функция sprintf()
- •Функция strcpy()
- •Функция strcmp()
- •Функция strcmpi()
- •Функция strcat()
- •Функция strlen()
- •Пример программы проверки функций
- •Новые типы переменных
- •Константы
- •Новые операции
- •Преобразование типов данных
- •Побитовые логические операции
- •Операции и выражения присваивания
- •Условное выражение
- •Операторы и блоки
- •Конструкция if-else
- •Конструкция else-if
- •Переключатель switch
- •Уточнение по работе оператора for
- •Оператор continue
- •Оператор goto и метки
- •Глава 7. Работа с указателями и структурами данных
- •Указатель
- •Указатели и массивы
- •Операции над указателями
- •Указатели и аргументы функций
- •Указатели символов и функций
- •Передача в качестве аргумента функции массивов размерности больше единицы
- •Массивы указателей
- •Указатели на функции
- •Структуры. Объявление структур
- •Обращение к элементам структур
- •Структуры и функции
- •Программы со структурами
- •Функция возвращает структуру
- •Функция возвращает указатель на структуру
- •Программа упрощенного расчета заработной платы одному работнику
- •Рекурсия в структурах
- •Битовые поля в структурах
- •Категории памяти
- •Глава 8. Классы в С++. Объектно-ориентированное программирование
- •Классы
- •Принципы построения классов
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Примеры создания классов
- •Пример 1
- •Пример 2
- •Пример 3
- •Конструктор класса
- •Деструктор класса
- •Классы и структуры в среде CLR
- •Классы и структуры
- •Абстрактные классы
- •Статические функции и элементы данных
- •Частные и общие данные. Интерфейсные функции
- •Использование оператора глобального разрешения для элементов класса
- •Глава 9. Ввод и вывод в языках С и С++
- •Ввод и вывод в С
- •Ввод/вывод файлов
- •Основные функции для работы с файлами
- •Стандартный ввод/вывод
- •Функции стандартного ввода/вывода
- •Ввод/вывод в С++
- •Общие положения
- •Ввод/вывод с использованием разных классов
- •Пространства имен
- •Работа с классом fstream
- •Работа с классом ofstream
- •Работа с классом ifstream
- •Работа с бинарным файлом
- •Стандартный ввод/вывод в С++
- •Общие положения
- •Стандартный вывод cout
- •Стандартный ввод cin
- •Глава 10. Продолжение изучения среды Visual C++
- •Создание проекта
- •Некоторые файлы проекта
- •Окно сведений об объекте
- •Вкладка Events
- •Вкладка Property Pages
- •Работа с окном сведений об объекте
- •Контекстное меню редактора кода
- •Суфлер кода (подсказчик)
- •Настройка редактора кода
- •Управление окнами редактора
- •Изменение шрифта и цвета
- •Начало редактирования кода программного модуля
- •Компоненты среды программирования VC++
- •Класс Form
- •Дизайнер форм
- •Помещение компонента в форму
- •Другие действия с дизайнером форм
- •Контекстное меню формы
- •Добавление новых форм к проекту
- •Организация работы с множеством форм
- •Вызов формы на выполнение
- •Cвойства формы
- •События формы
- •Некоторые методы формы
- •Рисование графиков в форме
- •Глава 11. Компоненты, создающие интерфейс между пользователем и приложением
- •Пространство имен System
- •Работа с переменными некоторых типов
- •Компонент Button
- •Свойства Button
- •События Button
- •Методы Button
- •Компонент Panel
- •Некоторые свойства Panel
- •Некоторые события Panel
- •Компонент Label
- •Некоторые свойства Label
- •События Label
- •Компонент TextBox
- •Некоторые свойства TextBox
- •События TextBox
- •Некоторые методы TextBox
- •Компонент MenuStrip
- •Некоторые свойства MenuStrip
- •События MenuStrip
- •Компонент ContextMenuStrip
- •Компонент ListView
- •Некоторые свойства ListView
- •События ListView
- •Компонент WebBrowser
- •Компонент ListBox
- •Как работать с ListBox
- •Свойства ListBox
- •Как использовать ListBox
- •Как формировать список строк
- •Компонент СomboBox
- •Свойства ComboBox
- •События ComboBox
- •Некоторые методы ComboBox
- •Примеры использования ComboBox
- •Пример 1
- •Пример 2
- •Пример 3
- •Компонент MaskedTextBox
- •Свойства MaskedTextBox
- •Компонент СheckedListBox
- •Пример: домашний телефонный справочник
- •Компоненты CheckBox и RadioButton
- •Компонент GroupBox
- •Компонент LinkLabel
- •Компонент PictureBox
- •Некоторые свойства компонента PictureBox
- •Компонент DateTimePicker
- •Форматные строки даты и времени
- •Стандартное и пользовательское форматирование
- •Некоторые сведения о работе с датами
- •Компонент TabControl
- •Как задавать страницы
- •Некоторые методы TabControl
- •Некоторые свойства страницы TabPage
- •Как защитить страницу от неавторизованного доступа
- •Задача регистрации пользователя в приложении
- •Компонент Timer
- •Компонент ProgressBar
- •Компонент OpenFileDialog
- •Компонент SaveFileDialog
- •Компонент ColorDialog
- •Компонент FontDialog
- •Компонент PrintDialog
- •Компонент ToolStrip
- •Некоторые свойства ToolStrip
- •Использование ToolStrip
- •Глава 12. Работа с наборами данных. Общие сведения о базах данных
- •Проектирование баз данных
- •Модель базы данных
- •Структура проектирования базы данных
- •Идентификация сущностей и атрибутов
- •Проектирование таблиц
- •Определение неповторяющихся атрибутов
- •Набор правил при разработке таблицы
- •Определение ограничений на целостность данных
- •Принудительное обеспечение целостности данных
- •Выбор индексов
- •Язык SQL
- •Примеры оператора SELECT
- •Наборы данных (компонент DataSet)
- •Общая технология организации работы с базой данных в приложении
- •Пример работы с базой данных
- •Глава 13. Управление исключительными ситуациями
- •Операторы try, catch и throw
- •Пример 1
- •Пример 2
- •Классы типов исключений
- •Пример 3
- •Функции, выдающие исключения
- •Пример 1. Перевод строки String ^ в ASCII-строку
- •Пример 2. Перевод ASCII-строки в строку String ^
- •Пример 3. Преобразование строки String ^ в строку wchar_t
- •Пример 4. Преобразование строки wchar_t в строку String ^
- •Пример 5. Маршалинг native-структуры
- •Пример 6. Работа с массивом элементов native-структуры в managed-функции
- •Пример 7. Доступ к символам в классе System::String
- •Пример 10. Преобразование String в string
- •Пример 11. Преобразование string-строки в String-строку
- •Пример 12. Объявление дескрипторов в native-типах
- •Пример 13. Работа с дескриптором в native-функции
- •Предметный указатель
Глава 11. Компоненты, создающие интерфейс между пользователем и приложением |
377 |
||
|
|
|
|
|
|
|
|
Рис. 11.81. Демонстрация работы метода активизации страниц
Листинг 11.20
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
if(i== 0)
{
this->tabControl1->SelectTab(i+1); i=1;
}
else
{
this->tabControl1->SelectTab(i-1); i=0;
}
}
Переменная i объявлена как int i:
private:
///<summary>
///Required designer variable. int i;
Некоторые свойства страницы TabPage
Каждая страница компонента TabControl представляет собой отдельный объект — экземпляр класса TabPage со своими свойствами, методами и событиями.
Перечень некоторых свойств страницы, отображенных в окне Properties, показан на рис. 11.82. Там же приводится измененный стиль окантовки страницы и появление полос прокрутки, которые явились следствием изменения свойств BorderStyle
и AutoScroll.
378 |
Часть II. Приложения Windows Form |
||
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 11.82. Свойства страницы компонента TabControl
Как защитить страницу от неавторизованного доступа
Бывают случаи, когда требуется защитить информацию, расположенную на странице, от неавторизованного доступа. Например, на странице хранятся сведения, доступ к которым ограничен и может происходить только по паролю. Поэтому разработчик приложения должен уметь отказывать в доступе к странице. Закрыть страницу можно программным способом (в обработчике события SelectedIndexChanged компонента TabControl). Это событие возникает, когда пользователь переключается от одной страницы к другой. Надо проверить права пользователя, принятые для данного приложения, и если прав недостаточно, то закрыть страницу, к которой должен быть переход, выдать пользователю соответствующее сообщение и вернуться на предыдущую страницу.
Рассмотрим такой простой вариан защиты доступа к странице: запишем в ListBox имена закрытых страниц (можно усложнить задание и добавить пароли доступа к странице, по которым они открываются). А в обработчике события SelectedIndexChanged проверять имя открываемой страницы на попадание ее в "черный" список. Если страница присутствует в этом списке, то следует уменьшить ее индекс на единицу и вернуться к предыдущей странице. Пример такого обработчика (без проверки на пароли, т. к. это уже сугубо индивидуальные структуры) приведен в листинге 11.21, а результаты работы — на рис. 11.83 и 11.84. Отметим, что для добавления страницы в компонент на этапе дизайна надо открыть его контекстное меню и выполнить опцию Add Tab. А чтобы установить курсор мыши на TabControl, надо установить его на полосу после последней вкладки.
Глава 11. Компоненты, создающие интерфейс между пользователем и приложением |
379 |
Задание недоступных страниц |
Вид формы приложения |
Переключение |
в ListBox'е |
в режиме дизайна |
на доступную страницу |
|
|
|
Рис. 11.83. Закрытие доступа к некоторым страницам. Часть 1
Рис. 11.84. Закрытие доступа к некоторым страницам. Часть 2
Листинг 11.21
private: System::Void tabControl1_SelectedIndexChanged_1(System::Object^ sender, System::EventArgs^ e)
{
String ^s=this->tabControl1->SelectedTab->Name; for(int i=0; i < this->listBox1->Items->Count; i++)
{
if(!s->Compare(s,this->listBox1->Items[i]->ToString())) //можно
//закрыть страницу таким способом
{
MessageBox::Show("Эта страница для Вас закрыта", "Приложение 66",
MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
380 |
Часть II. Приложения Windows Form |
|
|
//вернуть индекс назад
Int j=this->tabControl1->SelectedIndex -1; this->tabControl1->SelectTab(j);
break;
}
}//for
}
Задача регистрации пользователя в приложении
Когда разработанное приложение сдается в эксплуатацию, первое, на что обращает внимание заказчик, это то, как осуществлена защита приложения от постороннего вмешательства. На основе уже знакомых нам компонентов рассмотрим простейшую задачу защиты — задачу регистрации пользователя в приложении. Здесь имеется в виду тот факт, что для входа в приложение пользователь должен, как и во всех порядочных системах, зарегистрироваться, т. е. набрать свое имя и пароль. Если все, что он набрал, верно, то доступ к приложению открыт.
Рассмотрим приложение, в котором в качестве основного компонента используется TabControl. В нем должно разместиться все приложение, начиная со 2-й страницы (а на 1-й странице расположится программа регистрации). Если регистрация пройдет успешно, то откроется 2-я страница. Мы специально взяли всего две страницы для примера (в реальной ситуации надо открыть доступ к соответствующим страницам по паролю).
Уже на первой странице располагаются компоненты: кнопки, TextBox и ListBox. Здесь в режиме дизайна формируются три строки с паролями. Пароль состоит из трех частей, отделенных друг от друга косой чертой: имя пользователя, собственно пароль и дата, до которой действует пароль.
Свойство Visuble ListBox устанавливается в false, чтобы в режиме исполнения он не был виден. Кнопка, разрешающая администратору задачи открывать список паролей для просмотра, тоже заблокирована (становится недоступной для нажатия) — ее свойство Enabled на этапе проектирования установлено в false.
У администратора имеется свой пароль (admin), который для простоты "зашит" в программу. Если пользователь наберет имя, соответствующее паролю администратора, кнопка разблокируется и высветится список паролей. При повторном нажатии на эту кнопку список паролей исчезает, и кнопка снова блокируется.
Во время работы на первой вкладке остальные будут заблокированы. При вводе данных регистрации признаком окончания ввода является нажатие клавиши
<Enter>.
Форма с компонентами, реализующими регистрацию, а также результаты ее выполнения показаны на рис. 11.85 и 11.86. Текст приложения приводится в лис-
тинге 11.22.
Глава 11. Компоненты, создающие интерфейс между пользователем и приложением |
381 |
||
|
|
|
|
|
|
|
|
Рис. 11.85. Регистрация пользователя в приложении. Часть 1
Рис. 11.86. Регистрация пользователя в приложении. Часть 2
382 |
Часть II. Приложения Windows Form |
|
|
Листинг 11.22
#pragma once
namespace TabControl3_User_Reg2011 {
using namespace System;
using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
protected:
///<summary>
///Clean up any resources being used.
///</summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::TabControl^ tabControl1; protected:
private: System::Windows::Forms::TabPage^ tabPage1; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::TabPage^ tabPage2; private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::TextBox^ textBox2; private: System::Windows::Forms::TextBox^ textBox1; private: System::Windows::Forms::Label^ label3; private: System::Windows::Forms::Label^ label2; private: System::Windows::Forms::ListBox^ listBox1; private: System::Windows::Forms::Button^ button2;
Глава 11. Компоненты, создающие интерфейс между пользователем и приложением |
383 |
private:
///<summary>
///Required designer variable.
//Здесь пользовательская информация int pos,pos1;//глобальные
String ^w,^us,^pas;
String ^key; //ключ открытия 1-й страницы
private: System::Windows::Forms::Label^ label4;
/// </summary> System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
///<summary>
///Required method for Designer support — do not modify
///the contents of this method with the code editor.
///</summary>
void InitializeComponent(void)
{
this->tabControl1 = (gcnew System::Windows::Forms::TabControl()); this->tabPage1 = (gcnew System::Windows::Forms::TabPage()); this->listBox1 = (gcnew System::Windows::Forms::ListBox()); this->button2 = (gcnew System::Windows::Forms::Button()); this->button1 = (gcnew System::Windows::Forms::Button()); this->textBox2 = (gcnew System::Windows::Forms::TextBox()); this->textBox1 = (gcnew System::Windows::Forms::TextBox()); this->label3 = (gcnew System::Windows::Forms::Label()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label1 = (gcnew System::Windows::Forms::Label()); this->tabPage2 = (gcnew System::Windows::Forms::TabPage()); this->label4 = (gcnew System::Windows::Forms::Label()); this->tabControl1->SuspendLayout(); this->tabPage1->SuspendLayout(); this->tabPage2->SuspendLayout();
this->SuspendLayout();
//
// tabControl1
//
this->tabControl1->Controls->Add(this->tabPage1); this->tabControl1->Controls->Add(this->tabPage2); this->tabControl1->Location = System::Drawing::Point(16, 15); this->tabControl1->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); this->tabControl1->Name = L"tabControl1"; this->tabControl1->SelectedIndex = 0;
384 |
Часть II. Приложения Windows Form |
|
|
this->tabControl1->Size = System::Drawing::Size(537, 337); this->tabControl1->TabIndex = 0;
this->tabControl1->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::tabControl1_SelectedIndexChanged);
//
//tabPage1
this->tabPage1->Controls->Add(this->listBox1); this->tabPage1->Controls->Add(this->button2);
this->tabPage1->Controls->Add(this->button1); this->tabPage1->Controls->Add(this->textBox2);
this->tabPage1->Controls->Add(this->textBox1); this->tabPage1->Controls->Add(this->label3);
this->tabPage1->Controls->Add(this->label2); this->tabPage1->Controls->Add(this->label1);
this->tabPage1->Location = System::Drawing::Point(4, 25); this->tabPage1->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
this->tabPage1->Name = L"tabPage1";
this->tabPage1->Padding = System::Windows::Forms::Padding(4, 4, 4, 4); this->tabPage1->Size = System::Drawing::Size(529, 308);
this->tabPage1->TabIndex = 0;
this->tabPage1->Text = L"Регистрация пользователя"; this->tabPage1->UseVisualStyleBackColor = true;
//listBox1
//
this->listBox1->FormattingEnabled = true; this->listBox1->ItemHeight = 16;
this->listBox1->Items->AddRange(gcnew cli::array< System::Object^ >(3) {L"us1/pas1/02.02.2012", L"us2/pas2/15.07.2012",
L"us3/pas3/31.12.2012"});
this->listBox1->Location = System::Drawing::Point(19, 186); this->listBox1->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); this->listBox1->Name = L"listBox1";
this->listBox1->Size = System::Drawing::Size(457, 116); this->listBox1->TabIndex = 7;
this->listBox1->Visible = false;
//
// button2
//
this->button2->Enabled = false;
this->button2->Location = System::Drawing::Point(441, 22); this->button2->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); this->button2->Name = L"button2";
this->button2->Size = System::Drawing::Size(36, 146); this->button2->TabIndex = 6;
this->button2->Text = L"Администратор";
Глава 11. Компоненты, создающие интерфейс между пользователем и приложением |
385 |
this->button2->UseVisualStyleBackColor = true;
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
//
// button1
//
this->button1->Location = System::Drawing::Point(8, 22); this->button1->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(25, 146); this->button1->TabIndex = 5;
this->button1->Text = L"Выход"; this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// textBox2
//
this->textBox2->Location = System::Drawing::Point(160, 118); this->textBox2->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); this->textBox2->Name = L"textBox2";
this->textBox2->PasswordChar = '*'; this->textBox2->Size = System::Drawing::Size(132, 22); this->textBox2->TabIndex = 4;
this->textBox2->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &Form1::textBox2_KeyDown);
//
// textBox1
//
this->textBox1->Location = System::Drawing::Point(160, 73); this->textBox1->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); this->textBox1->Name = L"textBox1";
this->textBox1->PasswordChar = '*'; this->textBox1->Size = System::Drawing::Size(132, 22); this->textBox1->TabIndex = 3;
this->textBox1->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &Form1::textBox1_KeyDown);
//
//label3
this->label3->Location = System::Drawing::Point(43, 122); this->label3->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
this->label3->Name = L"label3";
this->label3->Size = System::Drawing::Size(65, 28); this->label3->TabIndex = 2;
this->label3->Text = L"Пароль";
//label2
//
386 Часть II. Приложения Windows Form
this->label2->Location = System::Drawing::Point(43, 73); this->label2->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(109, 49); this->label2->TabIndex = 1;
this->label2->Text = L"Имя пользователя";
//
// label1
//
this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 15.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204))); this->label1->Location = System::Drawing::Point(47, 22);
this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(411, 28); this->label1->TabIndex = 0;
this->label1->Text = L"Т р у д о у с т р о й с т в о";
//
//tabPage2
this->tabPage2->Controls->Add(this->label4); this->tabPage2->Location = System::Drawing::Point(4, 25);
this->tabPage2->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); this->tabPage2->Name = L"tabPage2";
this->tabPage2->Padding = System::Windows::Forms::Padding(4, 4, 4, 4); this->tabPage2->Size = System::Drawing::Size(529, 308);
this->tabPage2->TabIndex = 1; this->tabPage2->Text = L"Приложение";
this->tabPage2->UseVisualStyleBackColor = true;
//label4
//
this->label4->Location = System::Drawing::Point(155, 94); this->label4->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); this->label4->Name = L"label4";
this->label4->Size = System::Drawing::Size(197, 47); this->label4->TabIndex = 0;
this->label4->Text = L"Здесь размещаются компоненты приложения";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(548, 348); this->Controls->Add(this->tabControl1);
this->Margin = System::Windows::Forms::Padding(4, 4, 4, 4);
Глава 11. Компоненты, создающие интерфейс между пользователем и приложением |
387 |
this->Name = L"Form1"; this->Tag = L"";
this->Text = L"Городское агентство по трудоустройству";
this->Shown += gcnew System::EventHandler(this, &Form1::Form1_Shown); this->Resize += gcnew System::EventHandler(this, &Form1::Form1_Resize); this->tabControl1->ResumeLayout(false); this->tabPage1->ResumeLayout(false);
this->tabPage1->PerformLayout(); this->tabPage2->ResumeLayout(false); this->ResumeLayout(false);
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
this->Close();
}
private: System::Void textBox1_KeyDown(System::Object^ sender,System::Windows::Forms::KeyEventArgs^ e)
{
if(e->KeyCode == Keys::Enter)
{
//проверка UserName
String ^s; int jj;
s=this->textBox1->Text; jj=s->Compare(s,"admin"); if(!jj) //это имя администратора
{
this->button2->Enabled=true; //открывается его кнопка this->button2->Focus();
this->textBox2->Text=""; return;
}
int j=0,i=0; for(i=0;i<this->listBox1->Items->Count; i++)
{
w=this->listBox1->Items[i]->ToString(); int pos=w->IndexOf("/"); us=w->Substring(0,pos); jj=s->Compare(s,us);
if(jj) continue; else
{
j++;
388 |
Часть II. Приложения Windows Form |
|
|
int pos1=pos+1; // break;
}
} //for if(!j)
{
MessageBox::Show("Ошибка в UserName", "Приложение
67",MessageBoxButtons::OK,MessageBoxIcon::Asterisk); this->textBox1->Text=""; this->textBox1->Focus();
return;
}
//Здесь имя пользователя найдено, надо идти на ввод пароля this->textBox1->Text="";
this->textBox2->Text=""; this->textBox2->Focus(); return;
} //if (== Enter)
}//Обработчик
private: System::Void textBox2_KeyDown(System::Object^ sender,System::Windows::Forms::KeyEventArgs^ e)
{
//обработка пароля if(e->KeyCode == Keys::Enter)
{
String ^s=this->textBox2->Text; int j=0;
int pos=w->IndexOf("/"); //Подгонка под начало поиска 1-го
//разделителя после найденного.
//1-й всегда найдется, т. к. он нашелся
//при поиске UserName
int pos1=w->IndexOf("/",pos+1); //ищется 2-й разделитель if(!pos1)
{
MessageBox::Show("Ошибка в строке паролей", "Приложение
",MessageBoxButtons::OK,MessageBoxIcon::Asterisk); this->textBox2->Text=""; this->textBox2->Focus();
return;
}
pas=w->Substring(pos+1, (pos1 — pos -1)); int jj=s->Compare(s,pas);
if(jj)
{
MessageBox::Show("Ошибка в Password", "Приложение
",MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
Глава 11. Компоненты, создающие интерфейс между пользователем и приложением |
389 |
||
this->textBox2->Text=""; |
|
||
this->textBox2->Focus(); |
|
||
return; |
|
|
|
} |
|
|
|
//Пароль сравнился. Проверяем дату |
|
||
pos1=pos1+1; |
|
|
|
pas=w->Substring(pos1); |
|
||
DateTime din,dtek; |
|
|
|
dtek=dtek.Today; |
//текущая дата |
|
|
din=din.Parse(pas);// =StrToDate(pas); дата из пароля |
|
||
if(dtek > din) |
|
|
|
{ |
|
|
|
key=pas; |
|
|
|
MessageBox::Show("Срок действия пароля истек", "Приложение |
|
||
",MessageBoxButtons::OK,MessageBoxIcon::Asterisk); |
|
||
this->textBox2->Text=""; |
|
||
this->textBox2->Focus(); |
|
||
return; |
|
|
|
} |
|
|
|
return; |
|
|
|
this->textBox1->Text=""; |
|
||
this->textBox2->Text=""; |
|
||
this->tabControl1->SelectedIndex=1; |
|
||
}//if Key== |
|
|
|
}//обработчик |
|
|
|
//------------------------------------------------------------------ |
|
||
private: System::Void tabControl1_SelectedIndexChanged(System::Object^ |
|
||
sender,System::EventArgs^ |
e) |
|
|
{ |
|
|
|
int i=key->Compare(key,pas); |
|
||
if(!i) |
|
|
|
{ |
|
|
|
this->tabControl1->SelectedIndex =0; |
|
||
} |
|
|
|
} |
|
|
|
private: System::Void Form1_Resize(System::Object^ sender, |
|
||
System::EventArgs^ |
e) |
|
|
{ |
|
|
|
this->textBox1->Focus(); |
//установка фокуса ввода на UserName |
|
|
} |
|
|
|
private: System::Void Form1_Shown(System::Object^ sender,System::EventArgs^ e)
{
this->textBox1->Focus(); //установка фокуса ввода на UserName
}