繁体   English   中英

"如何使多个控件保持焦点?"

[英]How can I keep multiple controls in focus?

我在左侧有一个树视图。 选择一个节点会在右侧的表格中显示相关信息。

我能否同时保持右侧的树和任何一个控件(文本框、组合框、复选框)处于焦点位置? 这将使用户能够选择一个字段、进行更改、选择另一个节点,而无需返回并再次选择同一字段,只需键入并更改同一字段的值。

谢谢。

编辑<\/strong>
我想可以手动实现这样的行为:

private Control __cFocus;

private void {anyControl}_Focus(object sender, EventArgs e)
{
    __cFocus = (Control)sender;
}

private void treeView1_AfterSelect(object sender, EventArgs e)
{
    __cFocus.Focus();
}

不,你不能同时保持两个控件的焦点。 但是您可以做的是将焦点设置为树视图AfterSelect事件中的目标控件

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    textBox1.Focus();
    textBox1.SelectAll();
}

然后在你的文本框中离开,保存更改,如下所示:

private void textBox1_Leave(object sender, EventArgs e)
{
    //save changes here
}

这样,每当您在树视图中选择一个项目时,请检查您的文本框以进行更改并根据需要进行保存,然后您将重新关注文本框以供下次编辑

如果要关注它,可以使用usercontrol。 您可以将文本框放在usercontrol上,并使用treeview select上的set属性在usercontrol上设置此文本框的焦点。

只有一个元素有焦点!

但是我有一个想法可以解决你的问题。 假设你有一个带有TreeView和TextBox的窗口。 将TreeView的HideSelection属性设置为false并订阅AfterSelect事件(如edeperson已经回答),如下所示:

private void OnTreeViewAfterSelect(object sender, TreeViewEventArgs e)
{
    textBox1.Text = e.Node.Text;
    textBox1.Focus();
}

然后订阅TextBox的KeyDown事件并在事件方法中执行以下操作:

private void OnTextBoxKeyDown(object sender, KeyEventArgs e)
{
    if ((e.KeyCode == Keys.Up) || (e.KeyCode == Keys.Down))
    {
        treeView1.Focus();
        SendKeys.Send(e.KeyCode == Keys.Up ? "{UP}" : "{DOWN}");
    }
}

最后订阅TextBox的Leave事件并在事件方法中执行以下操作:

private void OnTextBoxLeave(object sender, EventArgs e)
{
    if (treeView1.SelectedNode != null)
    {
        treeView1.SelectedNode.Text = textBox1.Text;
    }
}

而且,它应该像你期望的那样工作......

如果您可以通过在 WPF 中设置 FocusManager.IsFocusScope="True" 来设置 2 个或更多元素的焦点,则在您想要焦点的元素上,然后在每个元素上拉应用: .Focus() 在您的代码中,您很好去。 附加信息: https ://docs.microsoft.com/es-es/dotnet/api/system.windows.input.focusmanager.isfocusscope?view=windowsdesktop-6.0

不,你可能没有,在任何给定的时间只有一个控件可能是焦点。

请参阅Moonlight的评论,了解实现您所寻求行为的一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM