GotFocusとLostFocusイベントはどこに行った?VB6ではコントロールがフォーカスを受け取った時にGotFocusイベントが、フォーカスを失った時にLostFocusイベントが発生しましたが、.NETではこれらのイベントが見つかりません。.NETではどのようにすればよいのでしょうか? MSDNの「Visual Basic .NET における TextBox コントロールの変更点」によると、VB6のGotFocus及びLostFocusイベントに代わるものは、.NETではEnter及びLeaveイベントだということです。よって、これらのイベントを使用すればよいでしょう。 ここからは余談です。実は、VB.NETにもGotFocusとLostFocusイベントは存在しています。しかしVisual Studioでは、VB.NETの場合はコードエディタ上の「メソッド名ボックス」に、C#の場合はプロパティウィンドウの「イベント」に、GotFocusとLostFocusが表示されません。 GotFocusイベントとLostFocusイベントについて、MSDNの「GotFocus イベント」と「LostFocus イベント」には次のように書いてあります。 「GotFocus イベントおよび LostFocus イベントは、WM_KILLFOCUS Windows メッセージおよび WM_SETFOCUS Windows メッセージに結び付けられた、低水準のフォーカス イベントです。一般的に、 GotFocus イベントおよび LostFocus イベントは、 UICues を更新するときにだけ使用されます。 Activated イベントおよび Deactivate イベントを使用する Form クラス以外のすべてのコントロールに対して、 Enter イベントおよび Leave イベントを使用する必要があります。」 つまり、GotFocus及びLostFocusイベントの代わりに、Enter及びLeaveイベントを使うべきという意味でこれらが表示されないようです。 以下にLostFocusイベントを使ったコードを一応書いておきます。 Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'TextBox1のLostFocusイベントハンドラを追加する AddHandler TextBox1.LostFocus, AddressOf TextBox1_LostFocus End Sub 'LostFocusイベントハンドラ Private Sub TextBox1_LostFocus(ByVal sender As Object, _ ByVal e As EventArgs) Console.WriteLine("LostFocusイベントが発生しました。") End Sub private void Form1_Load(object sender, System.EventArgs e) { //TextBox1のLostFocusイベントハンドラを追加する TextBox1.LostFocus += new EventHandler(TextBox1_LostFocus); } //LostFocusイベントハンドラ private void TextBox1_LostFocus(object sender, EventArgs e) { Console.WriteLine("LostFocusイベントが発生しました。"); } (この記事はメールマガジン「.NETプログラミング研究」で紹介したものを書き直したものです。) 注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright(C) DOBON!. All rights reserved.
|