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

问题描述 投票:0回答:1

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

所以按钮的代码是

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

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

代码有什么问题吗?

c# visual-studio listview button focus
1个回答
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事件。

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

© www.soinside.com 2019 - 2024. All rights reserved.