C# TabPage ImageIndex改变

问题描述 投票:0回答:1

所以,我正在使用别人的代码,我一直看到这种事情。

if (page.ImageIndex != 2)
{ 
    page.ImageIndex = 2; 
}

现在,从逻辑的角度来看,这似乎是没有意义的,所以我想知道是否有某种事件,当你改变图像时,他们不想触发(我已经搜索了一个,但我没有看到 - 我看到的是: BackgroundImageChanged但这似乎是别的什么),或者说,如果设置一个 ImageIndex 值,即使是相同的,也会导致闪烁或闪烁,还是什么?

只是想知道我缺少什么。

谢谢大家!

c# tabpage
1个回答
1
投票

改变Windows Forms控件的ImageIndex有时会产生意想不到的副作用。

你可以在这个帖子中看到类似的问题,在这里,上位者的树形视图遇到了意外的节点折叠。

当SelectedImageIndex被设置时,树形视图中奇怪的自动折叠行为?

所以以TreeView为例,改变SelectedImageIndex会导致整个树形视图创建一个新的窗口句柄,重新绘制,同时也会折叠除了包含相关节点的节点之外的所有节点。

这里可能也有同样的事情发生,检查TabPage ImageIndex setter的源代码证实了这一点,因为它会导致整个标签控件的重新绘制。

https:/referencesource.microsoft.com#system.windows.formswinformsmanagedsystemwinformsTabPage.cs,ec4a25e4fa0d595。

set_ImageIndex() => UpdateParent() => parent.UpdateTab() => TabControl.UpdateTabSelection() 

https:/referencesource.microsoft.com#system.windows.formswinformsmanagedsystemwinformsTabControl.cs,1b31148fc95aa30d。

因为,框架当然要涵盖一切。

// 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();
© www.soinside.com 2019 - 2024. All rights reserved.