Шаг 186.
Microsoft Visual C++ 2010. Язык С/С++. Компоненты Windows Forms. Компонент TabControl. Как защитить страницу от неавторизованного доступа

    На этом шаге мы рассмотрим использование компонента TabControl.

    Бывают случаи, когда требуется защитить информацию, расположенную на странице, от неавторизованного доступа. Например, на странице хранятся сведения, доступ к которым ограничен и может происходить только по паролю. Поэтому разработчик приложения должен уметь отказывать в доступе к странице. Закрыть страницу можно программным способом (в обработчике события SelectedIndexChanged компонента TabControl). Это событие возникает, когда пользователь переключается от одной страницы к другой. Надо проверить права пользователя, принятые для данного приложения, и, если прав недостаточно, то закрыть страницу, к которой должен быть переход, выдать пользователю соответствующее сообщение и вернуться на предыдущую страницу.

    Рассмотрим такой простой вариант защиты доступа к странице: запишем в ListBox имена закрытых страниц (можно усложнить задание и добавить пароли доступа к странице, по которым они открываются). А в обработчике события SelectedIndexChanged проверять имя открываемой страницы на попадание ее в "черный" список. Если страница присутствует в этом списке, то следует вернуться к предыдущей странице. Пример такого обработчика (без проверки на пароли, т. к. это уже сугубо индивидуальные структуры) приведен в примере ниже, а результаты работы приведены на рисунках 1 и 2.


Рис.1. Приложение на этапе разработки

    Тексты обработчиков:

.    .    .    .    .
		}
#pragma endregion
	private:
		int ts; // Номер текущей вкладки
// Обработка начальной загрузки формы
private: System::Void Form1_Load(System::Object^  sender,  System::EventArgs^  e) {
	 ts = 0;
	 tabControl1->SelectTab(ts); // Установка начальной вкладки 
 }
// Обработка изменения текущей вкладки
private: System::Void tabControl1_SelectedIndexChanged(System::Object^  sender, 
    System::EventArgs^  e) {
	 bool flag = true;
	 String ^s = tabControl1->SelectedTab->Name; 
	 for( int i = 0; i < listBox1->Items->Count; i++ )
		 if(!s->Compare( s, listBox1->Items[i]->ToString()))  
		 {
			 // Mожно закрыть страницу таким способом
			 MessageBox::Show( "Эта страница для Вас закрыта", 
				 "Компонент TabControl", 
				 MessageBoxButtons::OK,
				 MessageBoxIcon::Asterisk );
			 // Вернуть прошлую вкладку 
			 tabControl1->SelectTab(ts); 
			 flag = false;
			 break;
		 }//for
	if ( flag )
		ts = tabControl1->SelectedIndex;
 }
// Обработка изменения кнопки "Выход"
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
	 Close();
	 }
Архив проекта можно взять здесь.


Рис.2. Результат работы приложения

    На следующем шаге мы рассмотрим еще один пример использования этого компонента.




Предыдущий шаг Содержание Следующий шаг