2017-07-11 6 views
0

ボタンをクリックする前に、どのテキストボックスがフォーカスされているかを取得したい。ボタンをクリックする前にどのテキストボックスがフォーカスされていたかを取得する方法は?

しかし、ボタンをマウスでクリックすると、このボタンにフォーカスが変更されます。

どうすればいいですか?

または、ボタンをクリックする前のようなイベントがありますか?

どうもありがとう~~~

+0

あり、 TextBoxを保存するためにTextBox.GotFocusを使用したくありません。 私は実行時に新しいテキストボックスを作成します。 –

+1

あなたのコントロールに 'LostFocus'イベントハンドラを追加して、イベント発生時にプライベート変数' previousFocusedControl'を発生させることができます。これは以前のコントロールを追跡する方法になります。 – InBetween

+0

あなたはどんな問題を正確に解決していますか?このボタンは何をすると思われますか? – Sinatr

答えて

0

私は知りませんが、1つのトリッキーな方法は、ちなみに、この

namespace WindowsFormsApplication3 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      this.button1.MouseEnter += button1_MouseEnter; 
     } 

     void button1_MouseEnter(object sender, EventArgs e) 
     { 
      focusedTextBox = null; 

      if (this.textBox1.Focused) 
      { 
       focusedTextBox = this.textBox1; 
      } 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      if (focusedTextBox != null) 
      { 
       MessageBox.Show(focusedTextBox.Name + " has focuse"); 
      } 
     } 

     TextBox focusedTextBox; 

    } 
} 
+0

ありがとう、Bahrom。 あなたのアイデアは私のものと一致します。 私は質問をした後、私は道を試みます。 しかし、私はテキストボックスを見つけるためにforeachを使いました。 –

0

私はあなたがそれぞれの制御のためのフォーカス変更が追跡したいときを追跡する必要がありますと思います。

How track when any child control gets or loses the focus in WinForms?

しか選択の答えを見てはいけない、有望に見える程度出入りイベントを語るupvoted答えはそこにあります。

私のために働くいくつかのサンプルコードは、必要に応じて調整できます。

public Form1() 
    { 
    InitializeComponent(); 
    this.textBox1.Leave += Form1_Leave; 
    this.textBox2.Leave += Form1_Leave; 
    this.textBox3.Leave += Form1_Leave; 
    } 


    public object LastSender { get; set; } 

    private void Form1_Leave(object sender, EventArgs e) 
    { 
    LastSender = sender; 
    } 


    private void button1_Click(object sender, EventArgs e) 
    { 
    var lastTextBox = LastSender as TextBox; 
    if (lastTextBox == null) return; 
    MessageBox.Show(lastTextBox.Name); 
    } 

素晴らしい点は、すべてのイベントを同じ方法で購読できることです。あなたが動的に新しいコントロールを追加するときに、あなただけ行うことができます:それは実際の状況で使用することができる場合

newTextBox.Leave += Form1_Leave; 
+0

ありがとう、Derek。 しかし、私は記録するためにテキストボックスにイベントを設定したくありません。 –

関連する問題