我正在使用c#winform TabControl
。我创建了一个ImageList
,将其与TabControl
相关联,并用一些图片填充它。问题是,当我为特定选项卡设置ImageIndex
或ImageKey
时,图像会显示在选项卡上,但它会覆盖选项卡上的文本。为了增加我的困惑,一个TabPage
特别将图像渲染到正确的位置(图像后跟文本)。将图片放在正确位置的页面是我TabPage
首先设置ImageIndex
属性的TabControl
...
我在谷歌上搜索并在另一个论坛上发现了一个帖子,其中有人描述了这个问题,每个人都说他们无法重现这个问题。任何想法可能是什么问题?我真的不知道该尝试什么。
修改
很抱歉这个混乱。我有一个ImageList
对象,其ImageList
属性与ImageIndex
相关联,有两个图像。当我在TabPage
中TabControl
设置TabControl
属性时(根据我的阅读),它应该将TabPage
上的实际标签呈现为图片,然后是文字。这是我在TabControl
中为第一个 Tab
设置图片时会发生的情况,但是后面的每个标签都会使用覆盖标签上文字的图片进行渲染。因此文本出现在图像后面。我使用for循环为每个for (int i = 0; i < tabControl.TabPages.Count; i++) {
tabControl.TabPages[i].ImageIndex = SOME_IMG_INDEX;
}
设置图像:
TabPage
TabControl.TabPages
集合的索引0处的{{1}}看起来正常(图片后跟文字)。其他人将图像放在文本的顶部。即使我要在索引2处开始for循环迭代,索引2也会正确呈现,但之后的任何内容都会使图像覆盖文本。我希望这有助于使问题更清楚。
答案 0 :(得分:2)
我发现重新创建问题的唯一方法是我更改SizeMode
上的TabControl
属性。
当我将其更改为Fixed
时,图像和文字混合在一起。将其更改回“正常”会再次正确地呈现所有内容。
此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 :(得分:0)
如果你想要固定尺寸标签,一起使用这些代码(不知道原因,但这样可以解决问题)
tabControl.SizeMode = TabSizeMode.Normal;
tabControl.SizeMode = TabSizeMode.Fixed;