Каким образом 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д