DOBON.NET DOBON.NETプログラミング掲示板過去ログ

一つ前のアクティブコントロール名を取得

環境/言語:[WinXP、VB.NET]
分類:[.NET]

お世話になります。

一つ前のアクティブコントロールを取得する方法を探しています。
現在のアクティブコントロールは、

me.ActiveControl.Name

で取得出来ますが、一つ前のアクティブコントロールを
取得する方法はないのでしょうか。

使用用途としましては、

・textbox1
・textbox2
・textbox3
・button1

上記のコントロールが存在する状態で、
button1を押下された際に、前のフォーカスが

textbox1の場合
→特定の処理をする
textbox2の場合
→特定の処理をする
textbox3の場合
→何もしない

のような処理を実施したいと考えています。

また、画面全てのコントロールにLeaveイベントを作成して、
フォーカス喪失の際のコントロール名を取得しようとも考えましたが、
別途、textbox1にLeaveイベントを作成してフォーカスを移動させている所が
あるため、うまく動きません。
画面全てのコントロールにLeaveイベントを作成する以外で方法が
ありましたら、ご教授いただければと思います。
■No22260に返信(ABCさんの記事)
> で取得出来ますが、一つ前のアクティブコントロールを
> 取得する方法はないのでしょうか。

そのように実装をすればいいです。

ActiveControl が変わった時にイベントを発生させるには? (ActiveControlChanged)
http://blogs.wankuma.com/jeanne/archive/2007/04/02/69804.aspx
プロシージャとイベントを1対多で結びつける
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard10.htm

Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter,TextBox3.Enter
prevControlName = sender.Name
End Sub
2008/06/15(Sun) 21:15:59 編集(投稿者)
2008/06/14(Sat) 16:25:57 編集(投稿者)

魔界の仮面弁士さんのコード(フォーカスを持たないButton)と、tamaさんのコード(1つ前のActiveControlを使用する方法)が大変参考になります。
 
http://bbs.wankuma.com/index.cgi?mode=al2&namber=12748&KLOG=27
Delegateを宣言しておき、前のActiveControlがなんだったかは知らずに、
Delegateに設定されているメソッドを実行する方法もあります。

各コントロールにフォーカスが移った瞬間に、Delegateに設定を行います。

あとは、ボタンを押下した時点で、共通処理です。
どの処理が実装されているかは、意識しなくていいので、らくちんといえば、
らくちんです。

DOBON.NET | プログラミング道 | プログラミング掲示板