带TabPage ImageKey的TabControl ItemSize

时间:2018-06-08 22:04:12

标签: c# winforms tabcontrol

我有TabControl我希望将标签保持为固定大小,并且我希望标签中包含图标。我已设置TabControl.SizeMode = FixedTabControl.ItemSize = 100, 18。我还设置了TabControl.ImageList,并通过TabPage.ImageKey将图片分配给标签。

如果我注释掉分配ImageKey

,这就是它的样子

image1

如果我分配ImageKey

,这就是它的样子

image2

是否存在某种"对齐"对于图标?我希望它们位于空白区域的最左侧,但是它们从文本开始处开始。有什么建议吗?

(顺便说一句 - 如果我设置TabControl.SizeMode = Normal,我会按照我想要的方式获取标签内容,但标签不是固定大小的):

image3

1 个答案:

答案 0 :(得分:1)

我可以使用TabControl.SizeMode = Fixed验证您遇到的问题(在Windows 10上)。我最初在设计器中使用图标配置TabPage时看到了它。然而令人恼火的是,如果设计师关闭并重新打开,问题就会自行纠正。这表示某种窗口样式设置,Tab Control Styles基于SizeMode属性设置了CreateParams Property。但是,我没有找到尝试应用TCS_FORCEICONLEFT样式的解决方案。如果在显示控件之前设置了ImageIndex属性,则根据需要进行对齐。所以我认为必须在创建句柄时配置一些东西。

如果在设置TabPage.ImageIndex属性后调用表单的RecreateHandle方法,则表单会重绘并且所有内容都很好看。但是这会导致表单闪烁。在TabControl上调用Control.RecreateHandle方法也有效。这是一个受保护的方法,需要使用派生的TabControl来公开该方法,或者您可以使用Reflection来调用该方法。

public class MyTC : TabControl
{
    public void FixIcon()
    {
        RecreateHandle();
    }
}