TabControl ItemSize с TabPage ImageKey - PullRequest
0 голосов
/ 09 июня 2018

У меня есть TabControl, где я хочу, чтобы вкладки были фиксированного размера, и я хочу иконки во вкладках.Я установил TabControl.SizeMode = Fixed и TabControl.ItemSize = 100, 18.Я также установил TabControl.ImageList и назначаю изображения для вкладок с помощью TabPage.ImageKey.

Вот как это выглядит, если я закомментирую назначение ImageKey:

image1

А вот как это выглядит, если я назначаю ImageKey:

image2

Есть ли какое-то "выравнивание" для значков?Я хочу, чтобы они были слева, в пустом пространстве, но вместо этого они начинают с того места, где начинается текст.Любые предложения?

(Кстати - если я установлю TabControl.SizeMode = Normal, я получаю содержимое вкладки так, как я хочу, но размер вкладок не фиксированный):

image3

1 Ответ

0 голосов
/ 09 июня 2018

Я могу проверить проблему, с которой вы сталкиваетесь, TabControl.SizeMode = Fixed (в Windows 10).Я изначально видел это в конструкторе при настройке TabPage с иконкой.Однако раздражает то, что проблема устраняется, если дизайнер закрывается и снова открывается.Это предполагает какую-то настройку стиля окна, и в Свойство CreateParams на основе свойства SizeMode установлено несколько стилей управления вкладками .Однако я не нашел решения в попытке применить стиль TCS_FORCEICONLEFT.Если свойство ImageIndex установлено до показа элемента управления, то выравнивание выполняется по желанию.Поэтому я решил, что при создании дескриптора должно быть что-то настроено.

Если вы вызываете метод RecreateHandle формы после установки свойства TabPage.ImageIndex, форма перерисовывается и все выглядит хорошо.Однако это вызывает форму мигать .Вызов метода Control.RecreateHandle в TabControl также работает.Это защищенный метод, и для его использования потребуется использовать производный TabControl, либо вы можете использовать Reflection для вызова метода.

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