【问题标题】:C# TabPage ImageIndex changeC# TabPage ImageIndex 更改
【发布时间】:2020-05-04 20:24:02
【问题描述】:

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

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

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

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

谢谢大家!

【问题讨论】:

  • 我知道 TreeView 例如分配给任何 ImageIndex 会导致整个树视图创建一个新的窗口句柄,并且还会折叠除包含相关节点的节点之外的所有节点。这里可能发生了同样的事情,检查 TabPage ImageIndex setter 的源代码可以确认这一点,因为它会导致整个选项卡控件的重绘:referencesource.microsoft.com/#system.windows.forms/winforms/…
  • 感谢您的资源!这看起来可能非常有用。我可能会以此作为答案。再次感谢!

标签: c# tabpage


【解决方案1】:

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

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

Strange auto-collapse behaviour in a treeview when SelectedImageIndex is set?

例如,对于 TreeView,更改 SelectedImageIndex 会导致整个树视图创建一个新的窗口句柄、重新绘制,并且还会折叠除包含相关节点的节点之外的所有节点。

这里可能发生了同样的事情,检查 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多