這裏是我的情況:我有兩個TabPage's
(tabPage1
& tabPage2
)一TabControl
。 tabPage2
具有我創建的自定義用戶控件(因爲它以多種形式使用),其中包含一個TextBox
,該控件通過自定義用戶控件的Validating
事件附加了一些自定義驗證。如果我選擇了tabPage2
,並在文本框中輸入了無效數據並嘗試離開文本框,驗證按原樣進行,我的自定義事件處理程序將運行,並按照我的指示操作。但是,如果(在這種情況下)我從tabPage2
切換到tabPage1
而不是僅僅離開文本框,則允許切換到tabPage1
。我的文本框會被驗證兩次。此外,我無法控制窗體上的其他任何內容,因爲如果發現文本框無效,但我無法看到文本框能夠將任何有效數據放入窗體中,因此我會將文本框設置爲焦點! (我希望一切都有道理,不要害怕請求我澄清,如果需要的話)。所選選項卡允許更改,即使場無效
這是我的問題:如何發現字段無效時停止切換選項卡;從而也解決了驗證運行兩次的問題?
這裏是我的代碼:(此方法包含中提到的自定義用戶控件。)
private void OnValidatingUserControl(object sender, CancelEventArgs args)
{
if (IsTextBoxInvalid())
{
args.Cancel = true;
MessageBox.Show("Invalid data in text box!!!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.textBox.Focus();
}
}
也許你需要找到'BeforeChangeTab'(或類似名稱)的事件,並在那裏,調用文本框驗證,告訴標籤,如果他們能改不前。 –
我無法找到該事件,因此它將是'SelectedIndexChanged',如果驗證爲false,則返回到文本框選項卡。 –
@Daniel好的建議,但是,驗證發生在我創建的單獨的用戶控件中。所以,用戶控件並不知道它所在的「TabPage」。我曾嘗試檢查用戶控件的「Parent」是否爲「TabPage」,如果是,則選擇「TabPage」,然後給我的文本框焦點...但如果「TabPage」包含「包含用戶控件的面板。此外,驗證仍然運行兩次,所以我看到消息框兩次。 – bsara