Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как притормозить переключение вкладок?


Автор: =Женек= 1.9.2012, 12:47
Господа, есть у меня на форме вкалдки PageControl

Есть два события - OnChange и OnChanging. Я наивно думал, что разница между ними - первое событие генерируется после переключения, второе во время переключения, то есть сначала обработичик делает свое дело, затем переходит на новую вкладку.
У меня задача следующая - защитить одну из вкладок паролем.
Код

void __fastcall TForm1::MainPageControlChanging(TObject *Sender, int FromPage, int ToPage,
          bool &AllowChange)
{
if (MainPageControl->ActivePageIndex==0) {  //собственно, защищены паролем 1 и 2 вкладки, пароль проверяется тогда, когда с нулевой вкладки переключаемся на 1 или 2
}

PasswordEditForm->Show();
}




Как сделать, чтобы до проверки пароля программа не переключала вкладку?

Автор: Kasiro 1.9.2012, 14:15
Я в свое время делал вот так:

Код

void __fastcall TFullOrderForm::bsSkinPageControl1Change(TObject *Sender)
{
bsSkinPanel1->Visible=false;
if (bsSkinPageControl1->ActivePageIndex==3) {
if (ChangePage()==mrOk){
bsSkinPanel1->Visible=true;
return;
}
bsSkinPageControl1->ActivePageIndex=0;
bsSkinPanel1->Visible=false;
}
}


ChangePage() - функция вызывающая модальное окно с вводом пароля

то есть основная идея в том чтобы поместить весь контент этой вкладки на панель, и прятать панель при переходе, потом проверять правильно ли ввели пасс, если верно то показываем, если нет то перекидываем на другую вкладку

Автор: volvo877 4.9.2012, 09:45
Цитата(=Женек= @  1.9.2012,  12:47 Найти цитируемый пост)
Как сделать, чтобы до проверки пароля программа не переключала вкладку? 

Код

void __fastcall TForm1::PageControl1Changing(TObject *Sender, bool &AllowChange)
{
    if(static_cast<TPageControl*>(Sender)->ActivePageIndex == 0)
    {
        TForm2* passForm = new TForm2(this);
        AllowChange = (passForm->ShowModal() == mrOk);
        delete passForm;
    }
}

Автор: 3315720 20.9.2012, 12:58
Попробуй так:
Код

void __fastcall TForm1::PageControl1Changing(TObject *Sender,
      bool &AllowChange)
{
    if (((TPageControl *)Sender)->ActivePage == TabSheet1)
        AllowChange = (!Edit1->Text.IsEmpty());
    else
        AllowChange = true;
    if (AllowChange == false)
    {
        MessageBeep(0);
        Edit1->SetFocus();
    }
}

Автор: borisbn 20.9.2012, 13:48
По-хорошему, то, что пароль уже был введён, нужно запоминать и не спрашивать каждый раз при переключении. Лично меня бы такое поведение программы (запрос пароля при каждом переключении) просто взбесило бы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)