如果我将ShowItemToolTips
ListView
的{{1}}设置为true
设计器中的false
并将其更改为代码中的ItemChecked
,那么事件ItemCheck
被提出来了。虽然检查状态本身没有改变。但是在(也引发的){{1}}事件中,旧值不等于新值,但新值是先前可见的值。看起来这些项目是以某种方式重新插入或重置的。
我在两台机器和项目上测试了这个。为什么会发生这种情况,我该如何避免呢?
答案 0 :(得分:2)
我将解释"为什么",很难找到解决方法。某些控件属性非常有影响力,当您更改它们时会产生奇怪的副作用。与ShowItemToolTips一样,在创建ListView之后更改它需要Winforms完全销毁本机控件并从头开始重新创建它。在引擎盖下,它是在CreateWindowEx()调用中指定的样式标志(LVS_EX_INFOTIP)。 Control.RecreateHandle()方法确保它有效。如果你仔细观察,你会看到这种闪烁。
因此,在短暂的时间内,本机控件尚未使用原始复选框状态进行初始化。获得一个片状事件是一个错误,但它是从未修复的那种,因为这样做太困难或者从未被发现,因为在创建控件之后没有人更改过ShowItemToolTips属性。这样做非常罕见。
通常,这种本机控件重新创建技巧一直是Winforms中的重要错误生成器。很难找到解决方法,它们适合于处理它和#34;或者“不做”"类别。在这种情况下强烈建议使用后者。