更新文本时Combobox的验证事件

时间:2012-07-25 18:43:49

标签: c# winforms

我有一个comboxbox(好吧,实际上有一个ToolStripComboBox),我想要一个在某些条件下触发的cancleable事件:

  • 焦点丢失
  • 焦点获得
  • 从方框中选择的项目
  • 按Enter键

这是一个“正常”的验证事件,但是当我执行以下操作时

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

当我尝试通过[X]关闭应用程序时,才会触发此事件。此外,当一个无效的文本存在时,我无法离开应用程序,但是如何在我的条件下触发该事件?

此致

2 个答案:

答案 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事件中,并以此方式执行。