2010-01-21 2 views
3

У меня есть элемент управления вкладкой и 3 табуляции. (C#)Закладка управления закладкой

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

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

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

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

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

Вы можете разместить соответствующую часть вашего кода? –

+0

private void tabpage2_Leave (отправитель объекта, EventArgs e) { if (Validatetabpage2() == -1) { this.tabcontrol.SelectedTab = this.tabpage2; } } – Maneesh

+0

Здесь довольно приличная и актуальная дискуссия: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/39939f09-229a-45d1-ad3d-5c39ce9bd0ba/ –

ответ

1

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

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; 
} 
+0

Это выглядит как достойный подход, при условии, что событие «Оставшееся» срабатывает перед событием «Выбор». –

+0

Просто не используйте событие «Оставить». Выполнение проверки в событии Select достаточно хорошо. –

1

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

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

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

Необходимо установить начальную выбранную вкладку в событии Form Shown (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; 
} 
Смежные вопросы