首页 > 解决方案 > 跟踪最后两个焦点文本框

问题描述

我有一定数量的文本框,我需要跟踪最后两个集中的文本框。这是我尝试的方法。

private Control _focusedControl;
private Control _lastfocusedControl;

private void PCp1txt_LostFocus(object sender, System.EventArgs e)
{
    _lastEnteredControl = (Control)sender;
}
private void PCp1txt_LostFocus(object sender, System.EventArgs e)
{
    _lastEnteredControl = (Control)sender;
}

private void PCp2txt_GotFocus(object sender, EventArgs e)
{
    _focusedControl = (Control)sender;
}

private void PCp2txt_GotFocus(object sender, EventArgs e)
{
    _focusedControl = (Control)sender;
}

这不起作用,因为当我按下按钮时 _lastfocusedControl 的内容将与 _focusedControl 相同,因为通过单击该按钮获得了另一个控件的焦点。

标签: c#winforms

解决方案


您可以使用单个处理程序并在处理程序中处理Enter所有这些TextBox控件的事件,并跟踪最后n聚焦的TextBox控件:

const int n = 2;
TextBox[] textBoxes = new TextBox[n];
private void textBox_Enter(object sender, EventArgs e)
{
    var destination = new TextBox[n];
    Array.Copy(textBoxes, 1, destination, 0, textBoxes.Length - 1);
    textBoxes = destination;
    textBoxes[textBoxes.Length - 1] = (TextBox)sender;
}

在上面的示例中,我们将数组向左移动,然后将发送者分配给最后一个元素。这样,数组始终包含TextBox您的最后 n 个焦点控件。


推荐阅读