Каким образом TabControl определяет ширину табы? - C#
Формулировка задачи:
Создаю два TabControl-а, один с DrawMode = TabDrawMode.Normal, другой - TabDrawMode.OwnerDrawFixed. В DrawItem последнего отрисовываю текст согласно TabControl.DrawMode Property, На моей машине выглядит - см. приаттаченный рисунок.
И сразу же подлежащий вопрос - исходя из чего TabControl вычисляет ширину табы? Допустим, если я хочу несколько табой различной ширины (100 пикселей и 200 пикселей), есть ли иные способы задать эту ширину, кроме как подставлять в Text строку-заглушку, что бы TabControl вычислил нужную мне ширину? Как в этом случае подобрать эту заглушку, зная требуемую ширину табы?
при этом не удаётся поместить текст в выделенную для этого 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 определяет ширину табы?»
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);
}