2011-08-30 83 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;