所以,我正在使用别人的代码,我一直看到这种事情。
if (page.ImageIndex != 2)
{
page.ImageIndex = 2;
}
现在,从逻辑的角度来看,这似乎是没有意义的,所以我想知道是否有某种事件,当你改变图像时,他们不想触发(我已经搜索了一个,但我没有看到 - 我看到的是: BackgroundImageChanged
但这似乎是别的什么),或者说,如果设置一个 ImageIndex
值,即使是相同的,也会导致闪烁或闪烁,还是什么?
只是想知道我缺少什么。
谢谢大家!
改变Windows Forms控件的ImageIndex有时会产生意想不到的副作用。
你可以在这个帖子中看到类似的问题,在这里,上位者的树形视图遇到了意外的节点折叠。
当SelectedImageIndex被设置时,树形视图中奇怪的自动折叠行为?
所以以TreeView为例,改变SelectedImageIndex会导致整个树形视图创建一个新的窗口句柄,重新绘制,同时也会折叠除了包含相关节点的节点之外的所有节点。
这里可能也有同样的事情发生,检查TabPage ImageIndex setter的源代码证实了这一点,因为它会导致整个标签控件的重新绘制。
set_ImageIndex() => UpdateParent() => parent.UpdateTab() => TabControl.UpdateTabSelection()
因为,框架当然要涵盖一切。
// After changing the Bounds of TabPages, we need to
// make TabPages Redraw.
// Use Invalidate directly here has no performance
// issue, since ReSize is calling low frequence.
tabPages[index].Invalidate();