我正在使用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; }; } } }
那么你不必担心手动装饰每个文本框(或者忘记一个文本框).