Контроль вкладки оставить - PullRequest
3 голосов
/ 21 января 2010

У меня есть вкладка управления и 3 вкладки в нем. (C #)

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

iam в настоящий момент обрабатывает событие «ухода» на tabpage2, я проверяю значение текстового поля там, и если найдено недействительным я установил как tabcontrol.Selectedtab = tabpage2; это делает проверка, но переключается на новую вкладку! Как я мог ограничить навигацию.

Я новичок в C #, так что, может быть, я обрабатываю неправильное событие!

Вот соответствующий код:

private void tabpage2_Leave(object sender, EventArgs e) 
{ 
    if (Validatetabpage2() == -1) 
    { 
        this.tabcontrol.SelectedTab =this.tabpage2; 
    } 
}

Ответы [ 2 ]

1 голос
/ 21 января 2010

Хотя другие подходы могут работать, событие Validating разработано специально для этого.

Вот как это работает.Когда SelectedIndex элемента управления вкладки изменяется, установите фокус на вновь выбранную страницу, а также CausesValidation = true.Это гарантирует, что событие Validating будет вызвано, если пользователь попытается покинуть вкладку любым способом.

Затем выполните обычную проверку в событии проверки для конкретной страницы и отмените при необходимости.

Необходимо убедиться в том, что в событии «Показанная форма» установлена ​​исходная выбранная вкладка (Form_Load не будет работать), а также подключены специальные события проверки страницы вкладки.

private void Form_Shown(object sender, System.EventArgs e)
{
     // Focus on the first tab page
     tabControl1.TabPages[0].Focus(); 
     tabControl1.TabPages[0].CausesValidation = true; 

     tabControl1.TabPages[0].Validating += new CancelEventHandler(Page1_Validating);
     tabControl1.TabPages[1].Validating += new CancelEventHandler(Page2_Validating);
 }

    void Page1_Validating(object sender, CancelEventArgs e)
    {
        if (textBox1.Text == "")
        {
            e.Cancel = true; 
        }
    }

    void Page2_Validating(object sender, CancelEventArgs e)
    {
        if (checkBox1.Checked   == false)
        {
            e.Cancel = true;
        }
    }

private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e) 
{ 
     // Whenever the current tab page changes
     tabControl1.TabPages[tabControl1.SelectedIndex].Focus(); 
     tabControl1.TabPages[tabControl1.SelectedIndex].CausesValidation = true; 
}
1 голос
/ 21 января 2010

Вы можете использовать событие выбора TabControl для отмены переключения страниц. Если для e.Cancel установлено значение true, событие не позволяет другой вкладке выбрать другую вкладку.

private bool _cancelLeaving = false;

private void tabpage2_Leave(object sender, EventArgs e)
{
    _cancelLeaving = Validatetabpage2() == -1;
}

private void tabcontrol_Selecting(object sender, TabControlCancelEventArgs e)
{
    e.Cancel = _cancelLeaving;
    _cancelLeaving = false;
}
...