0

特定の条件下でトリガーされるキャンセル可能なイベントが必要なcomboxbox(実際にはToolStripComboBoxがあります)があります。

  • フォーカスが失われました
  • フォーカスが得られました
  • ボックスから選択したアイテム
  • Enterキーを押します

したがって、「通常の」検証イベントですが、次のことを行うと

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

このイベントは、[X]を介してアプリケーションを閉じようとしたときにのみトリガーされます。また、無効なテキストが存在する場合はアプリケーションを終了できませんが、上記の条件でそのイベントをトリガーするにはどうすればよいですか?

よろしく、

4

2 に答える 2

1

おそらく、初期値をどこかに保存する必要があります(おそらく、コントロールのユニバーサルタグフィールドなど)。

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;
}
于 2012-07-25T19:06:52.477 に答える
0

検証は、CausesValidationプロパティがtrueに設定されているダイアログのコントロールから、CausesValidationプロパティがtrueに設定されている別のコントロール(TextBoxコントロールからOKボタンなど)にフォーカスを移動するときに呼び出されます。適切なコントロールではなく、ウィンドウにCausesValidationが設定されているために、ウィンドウを閉じたときに検証が行われる可能性がありますか?

また、すべての検証をコントロール用のOnBlurイベントに移動して、そのようにすることもできます。

于 2012-07-25T19:06:38.727 に答える