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

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

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

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

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

. В случае DrawMode = TabDrawMode.Normal текст помещается:
Листинг программы
  1. public Form1()
  2. {
  3. InitializeComponent();
  4. var text = "X".PadLeft(128, '0');
  5. var ownerDrawFixedTabControl = new TabControl()
  6. {
  7. DrawMode = TabDrawMode.OwnerDrawFixed,
  8. Parent = this,
  9. Dock = DockStyle.Top,
  10. };
  11. ownerDrawFixedTabControl.DrawItem += new DrawItemEventHandler(tabControl_DrawItem);
  12. ownerDrawFixedTabControl.TabPages.Add(new TabPage(text));
  13. var normalTabControl = new TabControl()
  14. {
  15. DrawMode = TabDrawMode.Normal,
  16. Parent = this,
  17. Dock = DockStyle.Top,
  18. };
  19. normalTabControl.TabPages.Add(new TabPage(text));
  20. }
  21. void tabControl_DrawItem(object sender, DrawItemEventArgs e)
  22. {
  23. var tabControl = sender as TabControl;
  24. var tabPage = tabControl.TabPages[e.Index];
  25. using (var pen = new Pen(Color.Yellow))
  26. e.Graphics.DrawRectangle(pen, tabControl.GetTabRect(e.Index));
  27. using (var brush = new SolidBrush(Color.Black))
  28. e.Graphics.DrawString(tabPage.Text, tabPage.Font, brush, tabControl.GetTabRect(e.Index));
  29. }
На моей машине выглядит - см. приаттаченный рисунок. И сразу же подлежащий вопрос - исходя из чего TabControl вычисляет ширину табы? Допустим, если я хочу несколько табой различной ширины (100 пикселей и 200 пикселей), есть ли иные способы задать эту ширину, кроме как подставлять в Text строку-заглушку, что бы TabControl вычислил нужную мне ширину? Как в этом случае подобрать эту заглушку, зная требуемую ширину табы?

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

textual
Листинг программы
  1. public Form1()
  2. {
  3.     InitializeComponent();
  4.  
  5.     //var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; // Работает
  6.     var text = "1234567890-1234567890-1234567890-1234567890-1234567890"; // Не работает
  7.  
  8.     var ownerDrawFixedTabControl = new TabControl()
  9.     {
  10.         DrawMode = TabDrawMode.OwnerDrawFixed,
  11.         Parent = this,
  12.         Dock = DockStyle.Top,
  13.     };
  14.  
  15.     ownerDrawFixedTabControl.DrawItem += new DrawItemEventHandler(tabControl_DrawItem);
  16.  
  17.     ownerDrawFixedTabControl.TabPages.Add(new TabPage(text));
  18.  
  19.     var normalTabControl = new TabControl()
  20.     {
  21.         DrawMode = TabDrawMode.Normal,
  22.         Parent = this,
  23.         Dock = DockStyle.Top,
  24.     };
  25.  
  26.     normalTabControl.TabPages.Add(new TabPage(text));
  27. }
  28.  
  29. void tabControl_DrawItem(object sender, DrawItemEventArgs e)
  30. {
  31.     var tabControl = sender as TabControl;
  32.     var tabPage = tabControl.TabPages[e.Index];
  33.  
  34.     var format = new StringFormat
  35.     {
  36.         FormatFlags = StringFormatFlags.NoWrap,
  37.         Trimming = StringTrimming.None
  38.     };
  39.  
  40.     using (var brush = new SolidBrush(Color.Black))
  41.         e.Graphics.DrawString(tabPage.Text, tabControl.Font, brush, tabControl.GetTabRect(e.Index), format);
  42. }

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


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

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

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы