VB.NET20005
TextBox1とTextBox2とButton1がフォーム上に存在して
TextBox1にフォーカスがあります。
Button1をクリックした時に
TextBox1から遷移してきた時は処理をして
TextBox2から遷移した時には処理をしない
という事はしたいのです。
Button1のクリックイベントから何か遷移してきたのか
という事は判断できるのでしょうか?
どうかご教示願います。
例えば・・・。
TextBox1やTextBox2のSetFocusイベントに
Button1.Tagに何らかの情報(TEXT1 や TEXT2等)を書き込み・・・。
Button1のクリックイベントでは、Tagプロパティの情報を参照し
処理する。なんていうやり方もありますが・・・。
すいません、.NETではなくVB6で考えてました。
忘れてください。
返信ありがとうございます。
なるほどそういう考え方もありますね。
Tagに書き込むとかフォーム内の変数に書き込むとか考えたのですが
どうにかアクティブだったコントロールは取れないものかな?
と思っています。
簡単に済ますなら下記のような方法もありかな。
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
返信ありがとうございます。
やはり変数に退避するか、Tagに逃げるかなんですね。
Me.ActiveControlみたいなので前の項目が取れる方法があるのでは?
と思っていたのですが・・・
何か無いのでしょうか?
>やはり変数に退避するか、Tagに逃げるかなんですね。
プログラム的な観点から見れば、花ちゃんの方法なんかパーフェクトだと思いますが。
というか、
>Button1をクリックした時に
>TextBox1から遷移してきた時は処理をして
>TextBox2から遷移した時には処理をしない
これは使いにくいのでは、たとえばTextBox2の内容を変え
TextBox1の内容も変えようとして、TextBox1にフォーカスを
移したが、やっぱりやめてTextBox2のボタンを押したら
何も反応せずに、内容を変えていない、TextBox1のボタンは反応する、
クライアントは何が起こったか分からないのでは?
どこから遷移したかが問題ではなく、どのテキストの内容が変化したか
が重要ではないのでしょうか。
スキーマの見直しが必要と思いますが、余計なお世話だったらごめんなさい。
> どこから遷移したかが問題ではなく、
> どのテキストの内容が変化したかが重要ではないのでしょうか。
イベントドリブンの言語としては、
確かにユーザはどんな操作をするかはわからないですもんね。
遷移というユーザの操作に依存する方式は
イースターエッグぐらいにしておいたほうが良いのではないかと思います。
返信ありがとうございます。
ユーザー補助の画面を起動したいと思っています。
テキストボックスでF1押下時には補助が立ち上がる様にしているのですが
ボタンの表示名が(F1) 押下時にも補助画面を起動して
同じ動きをさせたいと思っています。
しかしユーザー補助があるテキストはTextBox1しかなくて
TextBox2は補助が無い入力項目になっています。
ですので、どこから遷移したかが欲しいのですが無理でしょうか?
それならば、単にオブジェクト型を引数に関数を作成するだけでは?
そうですよね。
なんらかの形で渡してあげなければいけないですよね。
色々と悩みましたがLeaveイベントで
共通の変数に渡す事にしました。
ありがとうございました。
ツイート | ![]() |