How can i make WinForms TabPage header width fit it's title?

前端 未结 3 598
青春惊慌失措
青春惊慌失措 2021-01-12 22:23

How can i make WinForms TabPage header width fit it\'s title? Here is the problem.

\"enter

相关标签:
3条回答
  • 2021-01-12 22:56

    Thanks, Hans. I used your code without creating a class

    //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 讨论(0)
  • 2021-01-12 23:04

    The native Windows tab control allows overriding the default minimum tab width. Sadly that capability is not exposed in the TabControl wrapper class. That's fixable though. Add a new class to your project and paste the code shown below. Compile. Drop the new control from the top of the toolbox onto your form.

    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);
    }
    
    0 讨论(0)
  • 2021-01-12 23:11

    You need to measure the fonts.

    Try something like this:

    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)
    

    Probably add a bot extra on for padding (width = width +10)

    Edited:

    <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
    
    0 讨论(0)
提交回复
热议问题