2011-01-19 9 views
0

私はこのフォームの5つのテキストボックスに書き込むために+ 50個のコントロールとキー数値スクリーンを持つフォームを持っています。最後のフォーカスのテキストボックス

私は、キー数値の画面を使用して、これらのテキストボックスに書くためにこのコードを使用しています:

Private Sub bt0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt0.Click, bt1.Click, bt2.Click, bt3.Click, bt4.Click, bt5.Click, bt6.Click, bt7.Click, bt8.Click, bt9.Click, btDec.Click 
     If TypeOf sender Is DevExpress.XtraEditors.SimpleButton Then 
      txtRefe.Focus() 
      SendKeys.Send(CType(sender, DevExpress.XtraEditors.SimpleButton).Text) 
     End If 
    End Sub 

問題は:私は数字ボタン

に触れる前に、フォーカスを持っていたこれら5テキストボックスのかを知る必要があり

私は最後のフォーカスを見つけるために、この記事Find out the control with last focusからこのコードを見てきました:

Private _focusedControl As Control 
    Private Sub TextBox_GotFocus(ByVal sender As Object, ByVal e As EventArgs) 
     _focusedControl = DirectCast(sender, Control) 
    End Sub 
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) 
     If _focusedControl IsNot Nothing Then 
      'Change the color of the previously-focused textbox 
      _focusedControl.BackColor = Color.Red 
     End If 
    End Sub 

しかし、どのように私は+ 50コントロール(多くの種類のコントロール:ボタン、チェックボックス、コンボ、テキストボックスなど)を持つフォームでそれを行うのですか?

答えて

0

フォームのControlsコレクションを再帰的にループし、イベントハンドラを追加することができます。

+0

解決策はすべて(+ 50個のコントロール)をキャッチすることをお勧めしますか? – aco

+0

@yae:はい。他の唯一のオプションは、Windowsメッセージを傍受することですが、それははるかに複雑になります。 – SLaks

0

誰にとっても簡単で最も簡単な解決策は、あなたが選んだデータ型を保持するフラグを作ることです。 intとしましょう。すると、各textBoxのフォーカスイベントごとに、そのフラグを異なる値で更新する必要があります。

When textBox1 gets focused -> set the flag value to 1 
when textBox2 gets focused -> set the flag value to 2 
when textBox3 gets focused -> set the flag value to 3 
when textBox4 gets focused -> set the flag value to 4 
when textBox5 gets focused -> set the flag value to 5 

ここでは、最後にフォーカスしたtextBoxの記録を保持しています。私たちが持っている5つのケースのそれぞれを処理するswitch文を実行できます

Select Case flag 
    case 1: 'code for textBox1 
    case 2: 'code for textBox2 
    case 3: 'code for textBox3 
    case 4: 'code for textBox4 
    case 5: 'code for textBox5 
    End Select 
+0

これは実行されません。 Previosuly私は何かを試してみました。誰が走りませんか?私は他のコントロールがフォーカスを取得するとき、私は5つのテキストボックスを処理する場合、私のフォームは+ 50コントロール(チェックボックス、コンボ、ボタンなど)を持って、変数は非現実的な値が格納されます。 – aco

+0

私はあなたを得ない。あなたが持っている必要があるのは、5の各textBoxに対して5つの異なるフォーカスイベントハンドラです。各イベントハンドラは、フラグ値を別のものに変更します。他のコントロールは私たちの問題と何が関係していますか? – deadlock

+0

たとえば、グリッドにフォーカスがあり、ユーザーが数値ボタンをクリックすると、そのテキストボックスにフォーカスがあり、間違っています。最後のフォーカス→グリッド – aco

関連する問題