2017-01-25 4 views
0

Мне нужна помощь в настройках tabcontrol. (winforms)tabControl itemsize в соответствии с именем файла

У меня есть управляемый владельцем tabcontrol и все работает нормально. Элементы имеют ширину 0 и sizemode для фиксированного в свойствах tabcontrol. При открытии файла, например test.txt затем «кнопка» выглядит примерно так

|test123.txt | 
|Untitled | 

, который хорошо, однако, если открыть более длинные имена файлов, то «кнопка» выглядит следующим образом

|thisisaverylongfilename.txt        | 
|anotherlongname.txt        | 

Я пытаюсь сделать «кнопку» так, чтобы имя файла просто соответствовало пробелу справа, и пространство должно быть одинаковым для всех.

Ниже мой код для пользователя нарисованной TabControl

 Image cross = imageList1.Images[0]; 
     int xWidth = cross.Width; 

     TabPage tp = tabControl1.TabPages[e.Index]; 

     Size size = tabControl1.ItemSize; 

     Font fntTab; 
     Brush bshBack; 
     Brush bshFore; 

     if (e.Index == this.tabControl1.SelectedIndex) 
     { 
      fntTab = new Font(FontFamily.GenericSansSerif, 8.0F, FontStyle.Regular); 
      bshBack = new System.Drawing.Drawing2D.LinearGradientBrush(e.Bounds, Color.FromName(tabpages_primary_backcolor), Color.FromName(tabpages_secondary_backcolor), System.Drawing.Drawing2D.LinearGradientMode.BackwardDiagonal); 
      bshFore = Brushes.Firebrick; 
     } 
     else 
     { 
      fntTab = new Font(FontFamily.GenericSansSerif, 8.0F, FontStyle.Regular); 

      bshBack = new SolidBrush(Color.Empty); 
      bshFore = new SolidBrush(Color.Black); 
     } 

     string tabName = this.tabControl1.TabPages[e.Index].Text; 
     StringFormat sftTab = new StringFormat(); 
     e.Graphics.FillRectangle(bshBack, e.Bounds); 
     Rectangle recTab = e.Bounds; 
     recTab = new Rectangle(recTab.X + 5, recTab.Y + 4, recTab.Width, recTab.Height - 4); 
     e.Graphics.DrawString(tabName, fntTab, bshFore, recTab, sftTab); 


     if (tabControl1.SelectedTab != null) 
     { 
      currentCrossRect = new Rectangle(
      e.Bounds.Left + size.Width - 22, 3, xWidth, xWidth); 
      e.Graphics.DrawImage(cross, currentCrossRect.X - 2, currentCrossRect.Y + 2); 
     } 

Спасибо и рассматривает

+0

Да, извините - я имел в виду владельца, нарисованного, и это для winforms. –

ответ

0

Получить ширину текста с помощью:

SizeF s = e.Graphics.MeasureString(myString, myFont); 

И тогда вы можете установить ширину элемента к s.Width!

+0

Привет Galister. Я посмотрел на измерение, прежде чем я разместил этот вопрос, однако, я не совсем уверен, где в моем коде установить ширину s.Width, поскольку ширина получается из свойств tabcontrol. Если я добавлю tabControl1.ItemSize = новый размер (s.Width, 25) кнопка табуляции мерцает без остановки без изменения ширины. –

+0

Вы пытались изменить атрибут autosize? – galister