- PR -

ひとつ前のアクティブコントロール名

投稿者投稿内容
くんちん
常連さん
会議室デビュー日: 2002/10/07
投稿数: 46
投稿日時: 2003-02-17 13:30
みかんさんありがとうございます。
一番最初にそのように考えたのですが、FORMにたくさんの
コントロールが存在する時に、一つ一つ制御していかなければ
ならないので、他の方法を探しました。
結果、上記のような形になりました。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-02-17 14:47
>FORMにたくさんのコントロールが存在する時に、一つ一つ制御していかなければならないので

いや、アクティブだったコントロール(TextBox)を、それぞれのGotFocusイベントを使って覚えておくというのは良い方法かもしれません。
「一つ一つ制御」というのは、例えば30個TextBoxがあったら、30個の関数を作ってそれぞれに同じような処理を書かなければならなくなるというようなことを仰っているんですか?
.NETにまだ慣れていらっしゃらないという事ですので一々説明させて頂きますが、.NETにはVB6.0のように(Button1_Click()のような)イベント処理専用の関数というものはありません。
オブジェクトにイベントが起きたときに必要な情報と共に関数を呼び出してもらうのですが、その関数はプログラマが作り、そして設定します。

ですので、30個TextBoxがあっても、一つの関数で全ての(GetFocus等の)イベントを処理することもできます。
有り難いことに、その渡される情報では、イベントが起きたインスタンスがどれかも判ります。

Private focusedTextBox As TextBox = Nothing
などと、フォーカスがあったTextBoxを覚えさせておくための変数を作っておき、
コード:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If focusedTextBox Is Nothing Then
Button1.Text = "なし"
Else
Button1.Text = focusedTextBox.Text & "と書いてあるTextBoxにFocusがあった!"
End If
End Sub

Private Sub AllTextBox_GetFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles TextBox1.GotFocus, TextBox2.GotFocus, TextBox3.GotFocus, TextBox4.GotFocus, TextBox5.GotFocus
focusedTextBox = CType(sender, TextBox)
End Sub



VB.NETで標準的な書き方ではこうなります。Handlesで,で区切って並べるんですね。
私はHandlesは嫌いですが……ね。

[ メッセージ編集済み 編集者: 一郎 編集日時 2003-02-17 14:50 ]

スキルアップ/キャリアアップ(JOB@IT)