C# 如何从ListView中选择要聚焦的控件
考虑以下形式: 当我在listview中单击“1”或“2”时,我希望textbox1或textbox2成为焦点 我编写了以下代码:C# 如何从ListView中选择要聚焦的控件,c#,winforms,listview,focus,C#,Winforms,Listview,Focus,考虑以下形式: 当我在listview中单击“1”或“2”时,我希望textbox1或textbox2成为焦点 我编写了以下代码: private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if (e.IsSelected) { if (e.Item.Text == "1")
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
if (e.Item.Text == "1")
textBox1.Focus();
else
textBox2.Focus();
}
}
但它不起作用。(Textbox会聚焦一段时间,但之后焦点会回到listview。)我希望在listview中选择相关项目时,焦点会在Textbox上
有什么建议吗
谢谢您的帮助。Mmmm,当ListView从focus/Select命令返回时,它可能再次接收到焦点。一种方法可能是使用计时器/延迟回调并触发该回调-即,使其异步,比如说50毫秒后,ListView onclick事件将在传递控件时完成。Mmmm,当ListView从focus/Select命令返回时,可能再次接收到焦点。一种方法可能是使用计时器/延迟回调,然后只触发它-即使其异步,比如说50毫秒后,ListView onclick事件将在传递控件时完成。由于事件的触发顺序,焦点将重置为ListView
listView1\u ItemSelectionChanged
MouseDown
和MouseUp
/MoustLeave
上跟踪所选项目,并适当设置焦点
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
if (e.Item.Text == "1")
textBox1.Focus();
else
textBox2.Focus();
}
listView1.Enabled = false;
}
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
listView1.Enabled = true;
}
private void listView1_MouseLeave(object sender, EventArgs e)
{
listView1.Enabled = true;
}
旁注-是否需要使用
列表视图
?在我这边做了一个快速测试,一个列表框
按照你想要的方式运行,没有任何攻击。由于触发事件的顺序,焦点被重置为列表视图
listView1\u ItemSelectionChanged
MouseDown
和MouseUp
/MoustLeave
上跟踪所选项目,并适当设置焦点
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
if (e.Item.Text == "1")
textBox1.Focus();
else
textBox2.Focus();
}
listView1.Enabled = false;
}
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
listView1.Enabled = true;
}
private void listView1_MouseLeave(object sender, EventArgs e)
{
listView1.Enabled = true;
}
旁注-是否需要使用
列表视图
?在我这方面做了一个快速测试,ListBox
的行为符合您的要求,没有任何黑客攻击。Select的行为与Focus()的行为完全相同。尝试调试您的应用程序,看看哪个元素正在窃取焦点。很明显,listView本身正在窃取焦点。如何停止此操作?Select的行为与Focus()的行为完全相同。请尝试调试应用程序,并查看哪个元素正在窃取焦点。显然,listView本身正在窃取焦点。如何阻止这一切?是的,谢谢。这会奏效的。但我不太喜欢这种方法,因为计时器太长了。当然,我也是。然而,您可能会发现这是LV控制的内部,它并不真正适合您所使用的。我想您可以使用异步事件(但随后您需要整理非Gui线程COM)。是否有理由使用LV?我过去使用过面板,控制图标布局和鼠标位置/事件-这可能是一个更好的选择(尽管moren参与了)?我相信在VS的错误列表中使用了具有类似行为的LV:!。或者可能是datagrid视图,但没有区别。但是他们是怎么做到的呢?你有没有试过用鼠标向上而不是向下触发呢。如果你对两者之间的移动感到担忧,你可以捕捉鼠标下降时的位置并触发鼠标上升时的焦点,那么在LV中不应该调用任何东西来拉回控制。是的,谢谢。这会奏效的。但我不太喜欢这种方法,因为计时器太长了。当然,我也是。然而,您可能会发现这是LV控制的内部,它并不真正适合您所使用的。我想您可以使用异步事件(但随后您需要整理非Gui线程COM)。是否有理由使用LV?我过去使用过面板,控制图标布局和鼠标位置/事件-这可能是一个更好的选择(尽管moren参与了)?我相信在VS的错误列表中使用了具有类似行为的LV:!。或者可能是datagrid视图,但没有区别。但是他们是怎么做到的呢?你有没有试过用鼠标向上而不是向下触发呢。如果你对两者之间的移动感到担忧,你可以捕捉鼠标下降时的位置并触发鼠标上升时的焦点,那么在LV中不应该调用任何东西来拉回控制。我需要这样的东西:!。他们是怎么做到的?:)我需要这样的东西:!。他们是怎么做到的?:)