专注于一个窗口形式的多个列表视图

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

以上是关于专注于一个窗口形式的多个列表视图的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 视图

在一个视图表中对多个模型进行排序

如何从 postgresql 视图表中获取要显示的对象列表

从视图表中获取数据时出现 Laravel 错误

无法将查询另存为视图表

laravel5.2如何创建视图表