Как сделать так, чтобы ширина заголовка WinForms TabPage соответствовала его названию? - PullRequest
6 голосов
/ 19 июля 2011

Как сделать так, чтобы ширина заголовка WinForms TabPage соответствовала его названию? Здесь проблема.

enter image description here

Ответы [ 3 ]

10 голосов
/ 19 июля 2011

Встроенный элемент управления вкладками Windows позволяет переопределить минимальную ширину вкладки по умолчанию. К сожалению, эта возможность не предоставляется в классе-оболочке TabControl. Это поправимо, хотя. Добавьте новый класс в ваш проект и вставьте код, показанный ниже. Компиляция. Перетащите новый элемент управления из верхней части панели инструментов на форму.

using System;
using System.Windows.Forms;

class MyTabControl : TabControl {
    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
        // Send TCM_SETMINTABWIDTH
        SendMessage(this.Handle, 0x1300 + 49, IntPtr.Zero, (IntPtr)10);
    }
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}
3 голосов
/ 19 августа 2011

Спасибо, Ганс.Я использовал ваш код без создания класса

//InitializeComponent
this.tabPresentations.HandleCreated += new System.EventHandler(TabControl_HandleCreated);

void TabControl_HandleCreated(object sender, System.EventArgs e)
{
     // Send TCM_SETMINTABWIDTH
     SendMessage((sender as TabControl).Handle, 0x1300 + 49, IntPtr.Zero, (IntPtr)4);
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
0 голосов
/ 19 июля 2011

Вам нужно измерить шрифты.

Попробуйте что-то вроде этого:

Dim tabPage As New TabPage
Dim width As Integer = 0
Dim valueToMeasure As String = <Your title Here>
Dim g As Graphics = tabPage.CreateGraphics()

width = CType(g.MeasureString(valueToMeasure, tabPage.Font).Width, Integer)

Вероятно, добавьте бот для дополнения (ширина = ширина +10)

Отредактировано:

<tab>.width = GetTabWidth(<Title>)

Private Function GetTabWidth (Byval title as String) as Integer

     Dim widthValue as Integer = 10    'Padding (Optional)

     Dim tabPage as New tabPage
     Dim g as Graphics = tabPage.CreateGraphics()

     widthValue += Ctype(g.measureString(title, tabPage.Font).Width, Integer)

     Return widthValue

End Function
...