专注于一个窗口形式的多个列表视图
Posted
技术标签:
【中文标题】专注于一个窗口形式的多个列表视图【英文标题】:Focus on multiple list view in one window form 【发布时间】:2018-08-14 12:30:58 【问题描述】:我有一个包含 2 个列表视图(例如,名为 a 和 b)和一个按钮的窗口窗体。当两个列表视图之间有焦点时,按钮的功能应该是显示不同的消息框。
所以按钮的代码是
if (a.Focused)
MessageBox.Show("a");
else
MessageBox.Show("b");
但是,当我在“b”列表视图中选择项目时。它总是返回 MessageBox.Show(b)。当我重新开始并在“a”列表视图中选择一个项目时,它给了我一个空引用异常。
代码有什么问题吗?
【问题讨论】:
因为当您单击按钮时,焦点会转移到按钮上,并且两个列表视图都会失去焦点。空引用异常是另一回事。回答您没有发布足够的代码。但在这种情况下,Debugger 是你最好的朋友 【参考方案1】:这是因为当您单击按钮时,它会获得焦点。所以它总是会显示“b”,因为列表视图 a 没有聚焦。
这里有一个建议:保存最新的焦点列表视图,并在两个列表视图中创建一个GotFocus
事件(它不在设计器中,所以以编程方式进行),单击按钮时检查最新的焦点列表视图是什么:
//Put this code after InitializeComponent();
ListViewA.GotFocus += ListViewFocus;
ListViewB.GotFocus += ListViewFocus;
...
private ListView Latest = null;
private void ListViewFocus(object sender, EventArgs e)
Latest = (sender as ListView);
private void Button_Click(object sender, EventArgs e)
if (Latest == null) MessageBox.Show("No listview is focused");
else if (Latest.Name == "ListViewA") MessageBox.Show("a");
else MessageBox.Show("b");
还有一个LostFocus
事件,如果你想再次设为null。
我不知道你为什么会得到空引用异常。是什么线路造成的?
【讨论】:
非常感谢。它有帮助。 没问题!感谢您接受我的回答。如果你也投票那就太好了,因为它给了我更多的声誉:P以上是关于专注于一个窗口形式的多个列表视图的主要内容,如果未能解决你的问题,请参考以下文章