我有一个带有几个文本框和一个按钮的 C# Windows 窗体应用程序。我想找出具有焦点的文本框并用它做一些事情。我已经编写了以下代码,但它当然不起作用,因为按钮一旦按下就会获得焦点。
private void button1_MouseDown(object sender, MouseEventArgs e)
{
foreach (Control t in this.Controls)
{
if (t is TextBox)
{
if (t.Focused)
{
MessageBox.Show(t.Name);
}
}
}
}
没有内置属性或功能来跟踪先前聚焦的控件。正如您所提到的,每当单击按钮时,它将获得焦点。如果您想跟踪之前获得焦点的文本框,则必须自己完成。
解决此问题的一种方法是向表单添加一个类级变量,该变量保存对当前聚焦的文本框控件的引用:
private Control _focusedControl;
然后在GotFocus
对于每个文本框控件的事件,您只需更新_focusedControl
该文本框的变量:
private void TextBox_GotFocus(object sender, EventArgs e)
{
_focusedControl = (Control)sender;
}
现在,每当单击按钮时(为什么要使用MouseDown
您的问题中显示的事件而不是按钮的事件Click
事件?),您可以根据需要使用对保存在类级变量中的先前聚焦的文本框控件的引用:
private void button1_Click(object sender, EventArgs e)
{
if (_focusedControl != null)
{
//Change the color of the previously-focused textbox
_focusedControl.BackColor = Color.Red;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)