フォーカス遷移時のイベント処理の使い道【Enter、Leave】
コントロールが遷移する時のイベント、本当はバリデーションとかでもっと種類があるけど、プレーンで一番使うのはこの2つではないかな?という気がする。バリデーション系の奴は後々まとめよう。
Leaveイベント
あるコントロールからフォーカスが外れた際に、そのコントロールまたは他のコントロールに対して何らかの処理をしたいとき。そのテキストボックスに入力された数値や文字列の内容を判定して、デフォルト値に変換したり、整数を小数値に置き換えたりする。バリデーションでエラーを出すほどではないような奴。
private void textBox1_Leave(object sender, System.EventArgs e) {
//空欄だった場合にデフォルト値を入力する if(string.isNullorEmpty(textBox1.text))
{
textBox1.text = 0; } }
ただし、ここらへんの処理は、ValidatingイベントとValidatedの合わせ技でも実現可能で、考え次第。エラーを出す必要はないかっていう時にはLeaveでよかろうと思う。
Enterイベント
あるコントロールにフォーカスが移ってきた瞬間、そのコントロールに対して何らかの処理をしたいとき。前のテキストボックスで入力した内容に応じて自分の内容や属性を変更したりできる。理論上他のコントロールに対して処理もできるとは思うけど、それはLeaveでできるので、このイベントではあくまで自コントロールに限定するのがベストな気がする。
private void textBox2_Enter(object sender, System.EventArgs e) {
//前の項目が空欄だったら現項目の背景色を赤に
if (string.isNullorEmpty(textBox1.text))
{
textBox2.BackColor = Color.Red;
}//現項目に記入があれば背景色を緑に
else if(!string.isNullorEmpty(textBox1.text)){
textBox2.BackColor = Color.Green;
}
}
GotFocusとLostFocus
正直ほとんど上の二種と同じだしMSDNさんが「この二種は低水準なイベントメソッドなので、LeaveとEnterを使うべきです」と仰っているので、使わないに越したことはない。
むしろ、使っているのを見たら何かがやべー現場なのでやべーと思ったほうがいい。そういう闇の気配ガンガンにしてる。