Каким образом TabControl определяет ширину табы? - C#

Узнай цену своей работы

Формулировка задачи:

Создаю два TabControl-а, один с DrawMode = TabDrawMode.Normal, другой - TabDrawMode.OwnerDrawFixed. В DrawItem последнего отрисовываю текст согласно TabControl.DrawMode Property,

при этом не удаётся поместить текст в выделенную для этого TabControl-ом область

. В случае DrawMode = TabDrawMode.Normal текст помещается:
public Form1()
{
    InitializeComponent();
 
    var text = "X".PadLeft(128, '0');
 
    var ownerDrawFixedTabControl = new TabControl()
    {
        DrawMode = TabDrawMode.OwnerDrawFixed,
        Parent = this,
        Dock = DockStyle.Top,                
    };
 
    ownerDrawFixedTabControl.DrawItem += new DrawItemEventHandler(tabControl_DrawItem);
  
    ownerDrawFixedTabControl.TabPages.Add(new TabPage(text));
 
    var normalTabControl = new TabControl()
    {
        DrawMode = TabDrawMode.Normal,
        Parent = this,
        Dock = DockStyle.Top,
    };
 
    normalTabControl.TabPages.Add(new TabPage(text));
}
 
void tabControl_DrawItem(object sender, DrawItemEventArgs e)
{
    var tabControl = sender as TabControl;
    var tabPage = tabControl.TabPages[e.Index];
    
    using (var pen = new Pen(Color.Yellow))
        e.Graphics.DrawRectangle(pen, tabControl.GetTabRect(e.Index));
 
    using (var brush = new SolidBrush(Color.Black))
        e.Graphics.DrawString(tabPage.Text, tabPage.Font, brush, tabControl.GetTabRect(e.Index));
}
На моей машине выглядит - см. приаттаченный рисунок. И сразу же подлежащий вопрос - исходя из чего TabControl вычисляет ширину табы? Допустим, если я хочу несколько табой различной ширины (100 пикселей и 200 пикселей), есть ли иные способы задать эту ширину, кроме как подставлять в Text строку-заглушку, что бы TabControl вычислил нужную мне ширину? Как в этом случае подобрать эту заглушку, зная требуемую ширину табы?

Решение задачи: «Каким образом TabControl определяет ширину табы?»

textual
Листинг программы
public Form1()
{
    InitializeComponent();
 
    //var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; // Работает
    var text = "1234567890-1234567890-1234567890-1234567890-1234567890"; // Не работает
 
    var ownerDrawFixedTabControl = new TabControl()
    {
        DrawMode = TabDrawMode.OwnerDrawFixed,
        Parent = this,
        Dock = DockStyle.Top,
    };
 
    ownerDrawFixedTabControl.DrawItem += new DrawItemEventHandler(tabControl_DrawItem);
 
    ownerDrawFixedTabControl.TabPages.Add(new TabPage(text));
 
    var normalTabControl = new TabControl()
    {
        DrawMode = TabDrawMode.Normal,
        Parent = this,
        Dock = DockStyle.Top,
    };
 
    normalTabControl.TabPages.Add(new TabPage(text));
}
 
void tabControl_DrawItem(object sender, DrawItemEventArgs e)
{
    var tabControl = sender as TabControl;
    var tabPage = tabControl.TabPages[e.Index];
 
    var format = new StringFormat
    {
        FormatFlags = StringFormatFlags.NoWrap,
        Trimming = StringTrimming.None
    };
 
    using (var brush = new SolidBrush(Color.Black))
        e.Graphics.DrawString(tabPage.Text, tabControl.Font, brush, tabControl.GetTabRect(e.Index), format);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы