我有TabControl
我希望将标签保持为固定大小,并且我希望标签中包含图标。我已设置TabControl.SizeMode = Fixed
和TabControl.ItemSize = 100, 18
。我还设置了TabControl.ImageList
,并通过TabPage.ImageKey
将图片分配给标签。
如果我注释掉分配ImageKey
:
如果我分配ImageKey
:
是否存在某种"对齐"对于图标?我希望它们位于空白区域的最左侧,但是它们从文本开始处开始。有什么建议吗?
(顺便说一句 - 如果我设置TabControl.SizeMode = Normal
,我会按照我想要的方式获取标签内容,但标签不是固定大小的):
答案 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();
}
}