Kur*_*raj 7 .net c# windows listview winforms
一点背景:我是WPF到WinForms转换器,有一段时间我一直在迁移我的应用程序.
我的朋友报告说我的代码在Windows XP上不起作用(它在启动时会产生堆栈溢出),即使它在Windows 7(我开发的)上工作正常.
经过一番研究后,导致问题的原因是:
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
listView1.SelectedIndices.Clear();
listView1.Items[0].Selected = true;
}
Run Code Online (Sandbox Code Playgroud)
现在我注意到了明显不好的决定,我不知道为什么它在Windows XP上不起作用.我想知道它为什么在Windows 7上运行.
很明显,在某些时候,编译器会弄清楚我正在尝试做什么,并防止同一事件一次又一次地被触发,但我宁愿让它什么都不做,所以我可以看到并挤压看到的bug.我正在开发的平台,而不是必须同时在两个平台下测试它.回到WPF我可以通过将e.Handled设置为'true'来手动处理这种行为,在WinForms中显然没有这样的事情.
是否有某种编译器标志?
尝试这个:
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (!listView1.Items[0].Selected) {
listView1.SelectedIndices.Clear();
listView1.Items[0].Selected = true;
}
}
Run Code Online (Sandbox Code Playgroud)
您只想在第一个项目上设置一次选择。问题是它可能会陷入永久循环。
至于为什么 Windows 7 比 XP 更宽容,我不能说。可能是 LVM_* 消息的处理顺序或其他任何内容。