2010-01-21 91 views
3

我有一個標籤控件和3個標籤頁。 (C#)Tabpage控件離開

如果我在標籤2中,並編輯文本框的值 ,然後單擊標籤3,我需要驗證在文本框中輸入的內容。 如果正確我應該允許切換到標籤3否則應該保留在標籤2它自我 我如何實現這一目標?

IAM curently處理「離開」事件tabpage2的, 我驗證文本框中的值有如果發現無效 我設置爲tabcontrol.Selectedtab = tabpage2;這確實是 ,但切換到新選項卡!我怎麼能限制導航。

我是C#的新手,所以可能是我正在處理錯誤的事件!

下面是相關代碼:

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

您可以發佈您的代碼的相關部分? – 2010-01-21 03:49:08

+0

private void tabpage2_Leave(object sender,EventArgs e) if(Validatetabpage2()== -1) { this.tabcontrol.SelectedTab = this.tabpage2; } } – Maneesh 2010-01-21 04:20:07

+0

這裏有一個相當體面和相關的討論:http://social.msdn.microsoft.com/forums/en-US/winforms/thread/39939f09-229a-45d1-ad3d-5c39ce9bd0ba/ – 2010-01-21 04:41:20

回答

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

看起來像一個體面的方法,只要Leave事件在選擇事件之前觸發。 – 2010-01-21 05:20:50

+0

只是不要使用Leave事件。在選擇事件中進行驗證足夠好。 – 2010-01-21 18:09:42

1

雖然其他方法可能有效,但驗證事件是專門爲此設計的。

這是它的工作原理。當選項卡控件的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; 
}