2012-07-25 87 views
0

我有一個comboxbox(好吧,在現實一款擁有ToolStripComboBox控件),我想是在一定條件下觸發cancleable事件:驗證事件的組合框時,文本被更新

  • 聚焦丟失
  • 焦點從包裝盒
  • 按下選擇獲得
  • 項目進入

這樣一個「正常」的驗證事件,但是當我做了以下

this.speedSelector.Validating 
+= new System.ComponentModel.CancelEventHandler(this.speedSelector_Validating); 

當我嘗試通過[X]關閉應用程序時,僅觸發此事件。另外,當無效文本出現時,我不能離開應用程序,這是有效的,但是如何在上述條件下觸發該事件?

問候,

回答

0

從對話框上的控制,其具有CausesValidation屬性設置爲true到具有CausesValidation屬性設置爲true,例如另一移動控制焦點時驗證將被稱爲從一個TextBox控件到OK按鈕。當您關閉窗口時可能會發生驗證,因爲您在窗口上設置了CausesValidation,而不是在適當的控件上設置?

您也可以將所有驗證移動到您的控件的OnBlur事件中,並以此方式進行。

1

您可能需要在某處存儲初始值(如可能在Control的通用標記字段中)。

您可以驗證對任何事件的控制:的SelectedIndexChanged,的SelectionChanged,TextUpdate等

存儲在控制時控制獲得或失去焦點不應該改變的價值。

public Form1() { 
    InitializeComponent(); 
    speedSelector.Tag = speedSelector.Text; 
    speedSelector.SelectedIndexChanged += new System.EventHandler(this.speedSelector_Changed); 
    speedSelector.SelectionChangeCommitted += new System.EventHandler(this.speedSelector_Changed);  
    speedSelector.TextUpdate += new System.EventHandler(this.speedSelector_Changed); 
} 

private void speedSelector_Changed(object sender, EventArgs e) { 
    if (validData(speedSelector.Text)) { 
    speedSelector.Tag = speedSelector.Text; 
    } else { 
    speedSelector.Text = speedSelector.Tag.ToString(); 
    } 
} 

private static bool validData(string value) { 
    bool result = false; 
    // do your test here 
    return result; 
}