Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关注一个窗口窗体中的多个列表视图_C#_Visual Studio_Listview_Button_Focus - Fatal编程技术网

C# 关注一个窗口窗体中的多个列表视图

C# 关注一个窗口窗体中的多个列表视图,c#,visual-studio,listview,button,focus,C#,Visual Studio,Listview,Button,Focus,例如,我有一个包含两个列表视图的窗口表单,分别命名为a和b以及一个按钮。当两个列表视图之间有焦点时,按钮的功能应该是以不同的方式显示消息框 所以按钮的代码是 if (a.Focused) MessageBox.Show("a"); else MessageBox.Show("b"); 但是,当我在“b”列表视图中选择项目时。它总是返回MessageBox.Showb。当我重新开始并在“a”列表视图中选择一个项目时,它会给我一个空引用异常 代码有问题吗?这是因为当你点击按钮时,它被聚

例如,我有一个包含两个列表视图的窗口表单,分别命名为a和b以及一个按钮。当两个列表视图之间有焦点时,按钮的功能应该是以不同的方式显示消息框

所以按钮的代码是

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


代码有问题吗?

这是因为当你点击按钮时,它被聚焦了。所以它总是显示b,因为listview a没有聚焦

这里有一个建议:保存最新的聚焦listview,并在两个listview中都创建一个GotFocus事件。它不在设计器中,因此在单击按钮时以编程方式创建它。检查最新的聚焦listview是什么:

//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事件


我不知道为什么会出现空引用异常。是哪一行引起的?

因为当您单击按钮时,按钮上的焦点会移动,并且两个列表视图都会失去焦点。空引用异常是另一回事。回答您没有发布足够的代码。但在这种情况下,调试器是你最好的朋友。非常感谢。这很有帮助,没问题!谢谢你接受我的回答。如果你也投票,那就太好了,因为它给了我更多的声誉:P