在一个窗口窗体中关注多个列表视图

时间:2018-03-06 15:27:35

标签: c# visual-studio listview button focus

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

所以按钮的代码是

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

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

代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

这是因为当您点击按钮时它会集中注意力。所以它总是显示" 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");
}

如果您想再次使用null,那么还会发生LostFocus事件。

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