【发布时间】:2012-08-12 15:50:28
【问题描述】:
我有一个使用 ListView 的项目。用户可以从列表视图中选择一些东西(它在详细信息模式下设置) - 并且在某些情况下会出现一个消息框,要求确认是/否。确认代码不会以任何方式修改 ListView 或选择。代码在 SelectedIndexChanged 事件处理程序中。
问题是这样的——当我做出一个创建弹出窗口的选择时——程序最初按预期工作。当我将鼠标移回列表视图时,它会导致选择更改为鼠标下方的符号(无需单击) - 就好像“HoverSelect”已打开(当它未打开时)。这仅在我做出涉及弹出消息框的选择后才会发生。
觉得我弄坏了一些东西,我决定写一个简单的测试。我创建了一个带有硬编码值的列表视图并输入了以下代码:
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
listView1.Enabled = false;
MessageBox.Show("Test");
listView1.Enabled = true;
}
当我进行选择时 - 事件被触发两次。我不确定这是否与我原来的问题有关,或者只是另一个巧合。
添加:在我上面的测试示例中 - 发生以下情况:
第一个选择 - “测试” 第二个选择 - “测试” “测试” 第三... N - “测试” “测试”
所以我认为这是我主要问题的另一个方面。删除代码以禁用/启用列表视图没有任何区别。
如何让 MessageBox 和 ListView 互相“玩得很好”?
【问题讨论】:
-
在不禁用列表视图的情况下尝试代码。
-
您正在禁用 SelectedIndexChanged 中的整个列表视图...为什么?我猜当您重新启用它时,列表视图会重新初始化其选择状态,再次引发事件......
-
在没有禁用列表视图的情况下仍然存在。而且我需要在我的主程序中禁用列表视图代码,因为当用户进行选择时启动的过程需要一些时间。
-
如果要显示某种形式的模态对话框,则在选择更改时,则不需要禁用并重新启用ListView,因为它们无法与之交互无论如何。
-
好的,那么肯定是其他原因导致事件被引发,我认为您需要发布更多代码。
标签: c# winforms listview messagebox