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