跟踪最后两个焦点文本框



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

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相同,因为通过单击该按钮聚焦了另一个控件。

您可以使用单个处理程序和处理程序处理所有这些TextBox控件的Enter事件,并跟踪最后一个关注nTextBox控件:

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;
}

在上面的例子中,我们将数组向左移动,然后将发送方分配给最后一个元素。这样,数组总是为您包含最后n个聚焦的TextBox控件。

我建议,为了简化它,做一些事情,比如当你的文本框聚焦时,把它的名字放进一个数组中,然后列出创建的数组的最后两个名字。

最新更新