【问题标题】: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 是你最好的朋友

标签: c# visual-studio listview button focus


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多