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;
 }
现在我注意到了明显不好的决定,我不知道为什么它在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;
   }
}
您只想在第一个项目上设置一次选择。问题是它可能会陷入永久循环。
至于为什么 Windows 7 比 XP 更宽容,我不能说。可能是 LVM_* 消息的处理顺序或其他任何内容。
| 归档时间: | 
 | 
| 查看次数: | 423 次 | 
| 最近记录: |