我正在Windows窗体应用程序(C#)上工作,在该窗体中,用户正在窗体中输入数据。在编辑表单中的数据时,用户可以随时单击表单上的按钮之一以执行某些操作。默认情况下,焦点会移到单击的按钮上,因此用户必须重新单击要编辑的控件,才能继续修改表单上的数据。我需要做的是在处理完按钮单击事件后,将焦点返回到上次编辑的控件。这是一个示例屏幕截图,说明了我在说什么:

用户可以在textbox1,textbox2,textbox3等中输入数据,然后单击按钮。我需要按钮才能将焦点返回到单击该按钮之前最近拥有焦点的控件。

我想知道是否有人能比我想出的更好的方法来实现此功能。这是我现在正在做的事情:

   public partial class Form1 : Form
    {
        Control _lastEnteredControl;

        private void textBox_Enter(object sender, EventArgs e)
        {
            _lastEnteredControl = (Control)sender;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Do something here");
            _lastEnteredControl.Focus();
        }


    }

因此,基本上,我们在这里有一个指向最后输入的控件的类变量。窗体上的每个文本框都已设置,因此当控件获得焦点时,将触发textBox_Enter方法。然后,单击按钮时,焦点将返回到单击按钮之前具有焦点的控件。有人对此有更好的解决方案吗?

最佳答案

对于“简单性”,可以尝试一下。

public Form1()
    {
        InitializeComponent();

        foreach (Control ctrl in Controls)
        {
            if (ctrl is TextBox)
            {
                ctrl.Enter += delegate(object sender, EventArgs e)
                              {
                                  _lastEnteredControl = (Control)sender;
                              };
            }
        }
    }

那么您不必担心手动装饰每个文本框(也不必担心一个)。

关于c# - 单击winform应用程序中的按钮后,如何将焦点返回到上次使用的控件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37317/

10-11 06:33
查看更多