2015-04-17 3 views
3

Я пытаюсь добавить кнопку закрытия или «X» на панели вкладки в tabcontrol, и я успешно сделал это, прочитав этот stackoverflow question.Добавление кнопки закрытия в заголовке вкладки вкладки в C# Форма Windows

Проблема заключается в названии страницы с вкладками, а знак X слит вместе. Я обнаружил, что панель заголовка вкладки не изменяет размер в соответствии с текстом заголовка.

Вот код:

//This code will render a "x" mark at the end of the Tab caption. 
e.Graphics.DrawString("X", e.Font, Brushes.Black, e.Bounds.Right + 15, e.Bounds.Top + 4); 
e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, e.Font, Brushes.Black, e.Bounds.Left+5, e.Bounds.Top + 4); 

e.DrawFocusRectangle(); 

Результат, который приходит здесь я изменил e.bounds.right значение, но до сих пор она не работает.

+1

Это зависит от параметра SizeMode. Вы можете добавить несколько пробелов в текст, чтобы обеспечить место для X. Или вы можете использовать measurestring для заполнения достаточно пробелов, прежде чем добавлять X в фактический текст, не рисуя его отдельно. Вы не сможете контролировать внешний вид, но таким образом. – TaW

ответ

5

Удостоверьтесь, что свойство Tab Tab DrawMode имеет значение OwnerDrawFixed. Это свойство решает, будет ли система или разработчик рисовать надписи.

Вот пример кода, который использует TabSizeMode = Fixed устанавливает размер вкладки:

public partial class Form1 : Form 
{ 
    const int LEADING_SPACE = 12; 
    const int CLOSE_SPACE = 15; 
    const int CLOSE_AREA = 15; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     //This code will render a "x" mark at the end of the Tab caption. 
     e.Graphics.DrawString("x", e.Font, Brushes.Black, e.Bounds.Right - CLOSE_AREA, e.Bounds.Top + 4); 
     e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, e.Font, Brushes.Black, e.Bounds.Left + LEADING_SPACE, e.Bounds.Top + 4); 
     e.DrawFocusRectangle(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     // get the inital length 
     int tabLength = tabControl1.ItemSize.Width; 

     // measure the text in each tab and make adjustment to the size 
     for (int i = 0; i < this.tabControl1.TabPages.Count; i++) 
     { 
      TabPage currentPage = tabControl1.TabPages[i]; 

      int currentTabLength = TextRenderer.MeasureText(currentPage.Text, tabControl1.Font).Width; 
      // adjust the length for what text is written 
      currentTabLength += LEADING_SPACE + CLOSE_SPACE + CLOSE_AREA; 

      if (currentTabLength > tabLength) 
      { 
       tabLength = currentTabLength; 
      } 
     } 

     // create the new size 
     Size newTabSize = new Size(tabLength, tabControl1.ItemSize.Height); 
     tabControl1.ItemSize = newTabSize; 
    } 
} 

снимок экрана образца кода сверху: Tab Size in Action

+0

Привет, есть ли идея установить цвет или любую графику для выбранной вкладки? –

6

Чтобы исправить слиты с tabPage.Text дополнительно нарисовали «X» просто добавьте:

tabControl.Padding = new System.Drawing.Point(21, 3); 

Это добавит некоторое дополнительное пространство в конце каждого TabPage