Vertical Tab Control with horizontal text in Winforms

前端 未结 5 843
再見小時候
再見小時候 2020-12-14 20:08

I would like to have the tabs on my TabControl displayed on the left, or sometimes right.
Unlike the System.Windows.Forms.TabControl, however, I would like the text to r

5条回答
  •  北荒
    北荒 (楼主)
    2020-12-14 20:35

    I don't know how robust this is and I can't claim to have created it but... http://www.dreamincode.net/forums/topic/125792-how-to-make-vertical-tabs/

    Here's a way of doing it.

    So first we are going to change its alignment to Left, by setting the property:

    Alignment = Left

    If you have XP themes turned on then you may notice the weird layout of Tab Control. Don't worry we will make it fine.

    As you may have noticed that Tabs are vertical, and our requirement is horizontal. So we can change the size of Tabs. But before we can do this we have to set the SizeMode property as,

    SizeMode = Fixed

    Now we can change the size by using the ItemSize property,

    ItemSize = 30, 120 Width = 30 and Height = 120

    After setting the Alignment = Left, Tab control rotates the Tabs which causes the Width and Height seem to be reversed. That is why when we increase Height, we see that width is increasing and when we increase width the height is effected.

    Now Text will also be displaying, but vertically. Unfortunately there is no simple way to resolve this issue. For this purpose we have to write the Text by ourselves. To do this we will first set the DrawMode

    DrawMode = OwnerDrawFixed

    01

    Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem
        Dim g As Graphics
        Dim sText As String
    
        Dim iX As Integer
        Dim iY As Integer
        Dim sizeText As SizeF
    
        Dim ctlTab As TabControl
    
        ctlTab = CType(sender, TabControl)
    
        g = e.Graphics
    
        sText = ctlTab.TabPages(e.Index).Text
        sizeText = g.MeasureString(sText, ctlTab.Font)
    
        iX = e.Bounds.Left + 6
        iY = e.Bounds.Top + (e.Bounds.Height - sizeText.Height) / 2
    
        g.DrawString(sText, ctlTab.Font, Brushes.Black, iX, iY)
    End Sub
    

提交回复
热议问题