2011-08-30 52 views
2

我正在使用c#winform TabControl。我创建了一个ImageList,将其与TabControl关联,并用几张图像填充它。问题是,当我为特定选项卡设置ImageIndexImageKey时,图像显示在选项卡上,但它覆盖了选项卡上的文本。为了增加我的困惑,一个TabPage特别将图像呈现在正确的位置(图像后跟文字)。具有在正确的位置图像的页面是什么TabPage我设置ImageIndex财产第一...TabControl上的图像对齐问题

我GOOGLE了周围,并找到一个帖子在另一个论坛上,有人形容这个问题,每个人都说他们couldn'重新创建问题。任何想法可能是什么问题?我真的不知道该怎么尝试。

编辑

很抱歉的混乱。我有一个TabControl对象,它的ImageList属性与一个ImageList有关,它有两个图像。当我设置ImageIndex财产上的TabControl一个TabPage(从我读),它应该呈现在TabControl作为图像然后是文本的实际标签。这是当我设定的图像在我TabControl但每一个标签下的第一TabPage,将与图像覆盖将标签上的文字渲染会发生什么。所以文字出现在图像后面。我用一个for循环设置图像的每个Tab

for (int i = 0; i < tabControl.TabPages.Count; i++) { 
    tabControl.TabPages[i].ImageIndex = SOME_IMG_INDEX; 
} 

TabPageTabControl.TabPages收集的索引0将看起来正常(图像后面的文本)。其他人将在文字上方显示图像。即使我要在索引2开始for循环迭代,索引2也会正确渲染,但是之后的任何内容都会将图像放在文本上。我希望这有助于使问题更清楚。

+0

请在这里附上一张图片,以便我们理解。 –

回答

2

我发现重新您的问题的唯一办法是,当我改变了对TabControlSizeMode财产。

当我把它改成Fixed,图像和文本进行混合。将其更改回“Normal”会再次正确显示所有内容。

这个answer讨论了删除标签并将它们添加回来,作为解决这个问题的黑客,在MSDN上发布。我尝试了黑客,它的工作。

更新:

由于Steve_Overflow指出的那样,这是一个简单的变通办法来更新标签正确:

tabControl1.SizeMode = TabSizeMode.Fixed; 

for (int i = 0; i < tabControl1.TabPages.Count; i++) 
    tabControl1.TabPages[i].ImageIndex = SOME_IMG_INDEX; 

tabControl1.ItemSize = tabControl1.ItemSize; 
+1

这正是问题所在。感谢发布。不幸的是我需要修复SizeMode。我真的宁愿不使用这项工作,但总比没有好。我目前正在使用'tabControl.ItemSize = tabControl.ItemSize'来触发事件及其正常工作。还有谁知道一些不那么简单的方法来解决这个问题? – user12345613

+0

@Steve_Overflow当黑客走了,这是一个很好的。 – LarsTech

+0

@@ LarsTech非常真实。就像我说的那样,那条线现在在那里,除非有人提供更好的解决方案,否则它将停留在那里。感谢您的发布。 – user12345613

0

如果你想固定大小的标签,使用论文码在一起(不知道为什么,但这会解决问题)

tabControl.SizeMode = TabSizeMode.Normal; 
tabControl.SizeMode = TabSizeMode.Fixed;