2012-10-16 23 views
2

我試圖在Windows窗體中構建嚮導框架。我設法從這個和其他網站收集了很多有用的提示,這些提示讓我非常接近成功。但是,在嚮導的第一個頁面以外的任何標籤頁上顯示ErrorProvider時遇到問題。Windows窗體錯誤提供程序不顯示在自定義選項卡控件中

我的嚮導控件是一個UserControl。它包含我從TabControl派生的自定義選項卡控件,這樣我就可以隱藏選項卡並忽略使用按按鈕在選項卡之間導航的嘗試,以及控件底部常用的Back/Next/Finish/Cancel按鈕集合。

我使用了反射來允許我在屬於Wizard Wizard的特定TabPage上提高驗證事件,當我點擊Next按鈕時。 (我不想要驗證整個TabControl,只有當前活動的頁面。)當我這樣做時,我看到在調試器中,我的驗證例程爲當前標籤頁上的控件正確調用,我看到我已經用一個有效的錯誤消息調用了我附加到特定控件(在這種情況下是一個TextBox)的ErrorProvider。我在驗證例程中將CancelEventArgs的Cancel設置爲true,並由使用反射機制的代碼拾取,以便我看到我失敗並且不更改制表符。我將焦點成功地設置到驗證失敗的控件上。

因此,所有似乎工作得很好。

不幸的是,我看到ErrorProvider的愉快閃爍的圖標,除非我在第一個標籤頁上。對於所有其他標籤頁,根本沒有可見的消息。

我很困惑。有什麼想法嗎?如果有幫助,我可以提供代碼片段。

謝謝!

回答

0

我假定在你的情況下移動到嚮導的下一個步驟中的按鈕被置於(下圖)TabControl

我注意到,如果我按下按鈕而不釋放圖標顯示正確鼠標按鈕。看起來容器外面的按鈕在發生驗證錯誤時會聚焦事件(通常您無法離開活動控件)。

我工作圍繞這一問題通過註冊的事件處理程序的按鈕MouseUp事件「重新調整」的TabControl

private void cmdOK_MouseUp(object sender, MouseEventArgs e) 
{ 
    tabControl1.Focus(); 
} 

注:你還需要設置你的形式ActiveControl財產的一個控制驗證失敗。

相關問題