专注于一个 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。
我不知道你为什么会得到空引用异常。是什么线路造成的?
我有一个 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。
我不知道你为什么会得到空引用异常。是什么线路造成的?