アクティブだったコントロール名の取得

解決


へなちょこ  2006-09-28 21:10:13  No: 96777

VB.NET20005

TextBox1とTextBox2とButton1がフォーム上に存在して
TextBox1にフォーカスがあります。
Button1をクリックした時に
TextBox1から遷移してきた時は処理をして
TextBox2から遷移した時には処理をしない
という事はしたいのです。

Button1のクリックイベントから何か遷移してきたのか
という事は判断できるのでしょうか?

どうかご教示願います。


いな  2006-09-28 22:13:01  No: 96778

例えば・・・。
TextBox1やTextBox2のSetFocusイベントに
Button1.Tagに何らかの情報(TEXT1 や TEXT2等)を書き込み・・・。

Button1のクリックイベントでは、Tagプロパティの情報を参照し
処理する。なんていうやり方もありますが・・・。


いな  2006-09-28 22:13:44  No: 96779

すいません、.NETではなくVB6で考えてました。
忘れてください。


へなちょこ  2006-09-28 22:18:29  No: 96780

返信ありがとうございます。
なるほどそういう考え方もありますね。
Tagに書き込むとかフォーム内の変数に書き込むとか考えたのですが
どうにかアクティブだったコントロールは取れないものかな?
と思っています。


VBレスキュー(花ちゃん)  URL  2006-09-29 03:57:00  No: 96781

簡単に済ますなら下記のような方法もありかな。

Private oldControl As Control

Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
            TextBox1.Leave, TextBox2.Leave, TextBox3.Leave, TextBox4.Leave
   oldControl = sender
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   MessageBox.Show("直前アクティブだったコントロールは : " & oldControl.Name)
End Sub


へなちょこ  2006-09-29 04:14:29  No: 96782

返信ありがとうございます。
やはり変数に退避するか、Tagに逃げるかなんですね。
Me.ActiveControlみたいなので前の項目が取れる方法があるのでは?
と思っていたのですが・・・

何か無いのでしょうか?


我龍院忠太  2006-09-29 06:18:08  No: 96783

>やはり変数に退避するか、Tagに逃げるかなんですね。
プログラム的な観点から見れば、花ちゃんの方法なんかパーフェクトだと思いますが。
というか、
>Button1をクリックした時に
>TextBox1から遷移してきた時は処理をして
>TextBox2から遷移した時には処理をしない
これは使いにくいのでは、たとえばTextBox2の内容を変え
TextBox1の内容も変えようとして、TextBox1にフォーカスを
移したが、やっぱりやめてTextBox2のボタンを押したら
何も反応せずに、内容を変えていない、TextBox1のボタンは反応する、
クライアントは何が起こったか分からないのでは?
どこから遷移したかが問題ではなく、どのテキストの内容が変化したか
が重要ではないのでしょうか。
スキーマの見直しが必要と思いますが、余計なお世話だったらごめんなさい。


確かに  2006-09-29 06:23:42  No: 96784

> どこから遷移したかが問題ではなく、
> どのテキストの内容が変化したかが重要ではないのでしょうか。

イベントドリブンの言語としては、
確かにユーザはどんな操作をするかはわからないですもんね。

遷移というユーザの操作に依存する方式は
イースターエッグぐらいにしておいたほうが良いのではないかと思います。


へなちょこ  2006-09-29 18:27:25  No: 96785

返信ありがとうございます。
ユーザー補助の画面を起動したいと思っています。
テキストボックスでF1押下時には補助が立ち上がる様にしているのですが
ボタンの表示名が(F1)  押下時にも補助画面を起動して
同じ動きをさせたいと思っています。
しかしユーザー補助があるテキストはTextBox1しかなくて
TextBox2は補助が無い入力項目になっています。
ですので、どこから遷移したかが欲しいのですが無理でしょうか?


なるほど  2006-09-29 19:13:40  No: 96786

それならば、単にオブジェクト型を引数に関数を作成するだけでは?


へなちょこ  2006-09-29 20:03:47  No: 96787

そうですよね。
なんらかの形で渡してあげなければいけないですよね。
色々と悩みましたがLeaveイベントで
共通の変数に渡す事にしました。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加