|
2019/02/14(Thu) 15:57:21 編集(投稿者)
■No90176 (どっと さん) に返信 > テキストボックスが2つ、コンボボックスが1つあります。 > この3つ全てに値が入力された時にイベントを発生させたいです。
イベントは「発生させる」ものではなく、「発生する」ものですね。 利用側の話ではなく、コントロールそのものを開発する場合(UserControl など)は別として。
> テキストボックス、コンボボックスのそれぞれのLeaveイベントで、
textBox1 ではなく textbox1 comboBox1 ではなく combo1 という命名に若干の違和感がありますが、それはさておき。
その仕様だと、最後の combo1 を抜けて MessageBox が表示された後で、 再度 textbox1 にフォーカスを戻すと、Tab キーでフォーカスが移るたびに、 MessageBox が何度も表示されてしまいそうですが、構わないのでしょうか。
もしも入力完了後に一度だけ表示するなら、再チェックを回避するための フラグ判定などを設ける必要が出てくるかと思います。
また、一度メッセージが表示された後、再度、値がクリア・編集された場合には フラグを戻す必要がありますね。 (textbox1.Modified 等を併用するのも良いかもしれません)
ただし値の入力は、ユーザー操作以外によって行われることもある点に注意。 ユーザー操作ではなくプログラムから操作されるような場合には、 フォーカス移動を伴うとは限らず、その場合 Leave は発生しません。
> とやれば目的は達成されるとは思うのですが、スマートじゃない気がします。
チェックするコントロール数が多い場合は、配列にしておく手もありますね。
private void Form1_Load(object sender, EventArgs e) { Control[] controls = { textbox1, textbox2, combo1 }; EventHandler example = delegate { if(controls.All(c => c.Text != "")) { MessageBox.Show("こんにちは"); } }; Array.ForEach(controls, c => c.Leave += example); }
|