我有一个comboxbox(好吧,实际上有一个ToolStripComboBox),我想要一个在某些条件下触发的cancleable事件:
这是一个“正常”的验证事件,但是当我执行以下操作时
this.speedSelector.Validating
+= new System.ComponentModel.CancelEventHandler(this.speedSelector_Validating);
当我尝试通过[X]关闭应用程序时,才会触发此事件。此外,当一个无效的文本存在时,我无法离开应用程序,但是如何在我的条件下触发该事件?
此致
答案 0 :(得分: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;
}
答案 1 :(得分:0)
将焦点从具有CausesValidation属性设置为true的对话框上的控件移动到另一个将CausesValidation属性设置为true的控件时,将调用Validating,例如,从TextBox控件到OK按钮。也许你关闭窗口时会发生验证,因为你在窗口上设置了CausesValidation,而不是在适当的控件上?
您也可以将所有验证移动到您的控件的OnBlur事件中,并以此方式执行。