在点击按钮之前如何获取哪个文本框?

时间:2017-07-11 11:11:25

标签: c#

我想在点击按钮之前获得哪个文本框已经聚焦。

但当我按下按钮时,焦点将变为此按钮。

那么,我该怎么办?

或者点击按钮之前有一些事件????

非常感谢~~~

2 个答案:

答案 0 :(得分:0)

我认为你必须跟踪你想要跟踪的每个控件的焦点变化。

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

不要只查看选定的答案,有一个赞成的答案会谈到看似有希望的进入和离开事件。

以下是一些适合我的示例代码,您可以根据需要进行调整。

  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;

答案 1 :(得分:0)

我不知道它是否可以在实际情况下使用,但一个棘手的方法是这个

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;

    }
}