[英]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.