繁体   English   中英

C# TabPage ImageIndex 更改

[英]C# TabPage ImageIndex change

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

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

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

只是想知道我错过了什么。

谢谢大家!

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

您可以在这篇文章中看到类似的问题,其中 OP 在树视图中遇到节点意外崩溃

设置 SelectedImageIndex 时 treeview 中奇怪的自动折叠行为?

因此,以 TreeView 为例,更改 SelectedImageIndex 会导致整个树视图创建一个新的 window 句柄,重新绘制,并折叠除包含相关节点的节点之外的所有节点。

这里可能发生了同样的事情,检查 TabPage ImageIndex setter 的源代码可以确认这一点,因为它会导致整个选项卡控件的重绘:

https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/TabPage.cs,cec4a25e4fa0d595

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

https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/TabControl.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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM