我有一个带有几个文本框和一个按钮的ac #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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*ray 17
没有内置的属性或功能来跟踪以前关注的控件.正如您所提到的,只要单击按钮,它就会成为焦点.如果你想跟踪之前关注的文本框,你将不得不自己动手.
解决此问题的一种方法是在表单中添加一个类级变量,该变量包含对当前焦点文本框控件的引用:
private Control _focusedControl;
Run Code Online (Sandbox Code Playgroud)
然后,GotFocus对于每个文本框控件,您只需_focusedControl使用该文本框更新变量:
private void TextBox_GotFocus(object sender, EventArgs e)
{
_focusedControl = (Control)sender;
}
Run Code Online (Sandbox Code Playgroud)
现在,只要单击一个按钮(为什么你使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16270 次 |
| 最近记录: |