c# - C# TabPage ImageIndex 更改
问题描述
所以,我正在使用其他人的代码,我一直看到这种事情:
if (page.ImageIndex != 2)
{
page.ImageIndex = 2;
}
现在,从逻辑的角度来看,这似乎没有意义,所以我想知道当您更改他们不想触发的图像时是否会触发某种事件(我已经搜索过一个但是我没有看到 - 我看到了BackgroundImageChanged
,但这似乎是别的东西),或者如果可能设置一个ImageIndex
值,即使它相同,也会导致闪光或闪烁,或其他什么?
只是想知道我错过了什么。
谢谢大家!
解决方案
更改 Windows 窗体控件的 ImageIndex 有时会产生意想不到的副作用。
您可以在这篇文章中看到类似的问题,其中 OP 在树视图中遇到节点意外崩溃
设置 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();
推荐阅读
- go - 如何使用字符串作为参数从 Go 调用 Rust 函数?
- python - 将二维点云双线性加权到网格上的最快方法
- c# - 无法使用 Unity 将 android 客户端连接到同一 LAN 上的服务器
- r - 在R中的两个数据框列表上应用一个函数
- javascript - 根据单选按钮输出更改图像输出
- c++ - 具有模板构造函数特化的模板类,用于初始化模板化基类
- java - 使用 GroupLayout 时出现 InvalidateStateException
- angular - 如何在 ng for 循环中动态创建引导行和列
- r - sapply 返回向量的第一个元素的重复实例,而不是由 R 中的自定义函数计算的所有元素
- node.js - 如何过滤来自 mongoDb 的元数据(对象)中的数据?