C# TabPage ImageIndex 改变
C# TabPage ImageIndex change
所以,我正在使用其他人的代码,但我一直看到这种情况:
if (page.ImageIndex != 2)
{
page.ImageIndex = 2;
}
现在,从逻辑的角度来看,这似乎没有意义,所以我想知道当您更改他们不想触发的图像时是否会触发某种事件(我已经搜索了一个,但我没有看到 - 我看到了 BackgroundImageChanged
,但那似乎是别的东西),或者如果可能设置一个 ImageIndex
值,即使它是相同的,也会导致闪烁还是闪烁之类的?
只是想知道我错过了什么。
谢谢大家!
更改 Windows 表单控件的 ImageIndex 有时会产生意想不到的副作用。
您可以在此 post 中看到类似的问题,其中 OP 遇到节点及其树视图的意外崩溃
因此,以 TreeView 为例,更改 SelectedImageIndex 会导致整个树视图创建一个新的 window 句柄、重新绘制,并折叠除包含相关节点的节点之外的所有节点。
这里可能发生了同样的事情,检查 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();
所以,我正在使用其他人的代码,但我一直看到这种情况:
if (page.ImageIndex != 2)
{
page.ImageIndex = 2;
}
现在,从逻辑的角度来看,这似乎没有意义,所以我想知道当您更改他们不想触发的图像时是否会触发某种事件(我已经搜索了一个,但我没有看到 - 我看到了 BackgroundImageChanged
,但那似乎是别的东西),或者如果可能设置一个 ImageIndex
值,即使它是相同的,也会导致闪烁还是闪烁之类的?
只是想知道我错过了什么。
谢谢大家!
更改 Windows 表单控件的 ImageIndex 有时会产生意想不到的副作用。
您可以在此 post 中看到类似的问题,其中 OP 遇到节点及其树视图的意外崩溃
因此,以 TreeView 为例,更改 SelectedImageIndex 会导致整个树视图创建一个新的 window 句柄、重新绘制,并折叠除包含相关节点的节点之外的所有节点。
这里可能发生了同样的事情,检查 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();