专注于一个 window 表单中的多个列表视图

Focus on multiple list view in one window form

我有一个 window 表单,其中包含 2 个列表视图(例如,名为 a 和 b)和一个按钮。当两个列表视图之间存在焦点时,按钮的功能应该以不同方式显示消息框。

所以按钮的代码是

if (a.Focused)
   MessageBox.Show("a");
else
   MessageBox.Show("b");

但是,当我在 'b' 列表视图中选择项目时。它总是 return MessageBox.Show(b)。当我重新开始并在 'a' 列表视图中选择一个项目时,它给了我一个空引用异常。

代码有什么问题吗?

这是因为当你点击按钮时它会聚焦。所以它将始终显示 "b" 因为 listview 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。

我不知道你为什么会得到空引用异常。是什么线路造成的?