На этом шаге мы рассмотрим использование компонента 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. Результат работы приложения
На следующем шаге мы рассмотрим еще один пример использования этого компонента.