Vorgehensweise: Anzeigen von seitlich ausgerichteten Registerkarten mit TabControl

Die Alignment-Eigenschaft des TabControl unterstützt das vertikale Anzeigen von Registerkarten (entlang des linken oder rechten Rands des Steuerelements), im Gegensatz zu horizontal (am oberen oder unteren Rand des Steuerelements). Standardmäßig führt diese vertikale Anzeige zu einer wenig benutzerfreundlichen Oberfläche, weil die Text-Eigenschaft des TabPage-Objekts nicht auf der Registerkarte angezeigt wird, wenn visuelle Stile aktiviert sind. Es gibt außerdem keine direkte Möglichkeit, um die Richtung des Texts innerhalb der Registerkarte zu steuern. Sie können den Ownerdrawn-Modus für TabControl verwenden, um die Benutzerfreundlichkeit zu verbessern.

Das folgende Verfahren zeigt, wie rechtsbündig ausgerichtete Registerkarten gerendert werden, wobei der Registerkartentext von links nach rechts verläuft, indem Sie die Funktion „Ownerdrawn“ verwenden.

So zeigen Sie rechtsbündig ausgerichtete Registerkarten an

  1. Fügen Sie Ihrem Formular einen TabControl hinzu.

  2. Setzen Sie die Alignment-Eigenschaft auf Right.

  3. Legen Sie die SizeMode-Eigenschaft auf Fixed fest, damit alle Registerkarten gleich breit sind.

  4. Legen Sie die ItemSize-Eigenschaft auf die gewünschte feste Größe für die Registerkarten fest. Denken Sie daran, dass sich die ItemSize-Eigenschaft verhält, als seien die Registerkarten am oberen Rand, obwohl sie rechtsbündig ausgerichtet sind. Demzufolge müssen Sie, um die Registerkarten zu verbreitern, die Height-Eigenschaft ändern, und um sie höher zu machen, müssen Sie die Width-Eigenschaft ändern.

    Für ein optimales Ergebnis mit dem folgenden Codebeispiel legen Sie die Width der Registerkarten auf 25 und die Height auf 100 fest.

  5. Setzen Sie die DrawMode-Eigenschaft auf OwnerDrawFixed.

  6. Definieren Sie einen Ereignishandler für das DrawItem-Ereignis des TabControl, das den Text von links nach rechts rendert.

    public Form1()
    {
        // Remove this call if you do not program using Visual Studio.
        InitializeComponent();
    
        tabControl1.DrawItem += new DrawItemEventHandler(tabControl1_DrawItem);
    }
    
    private void tabControl1_DrawItem(Object sender, System.Windows.Forms.DrawItemEventArgs e)
    {
        Graphics g = e.Graphics;
        Brush _textBrush;
    
        // Get the item from the collection.
        TabPage _tabPage = tabControl1.TabPages[e.Index];
    
        // Get the real bounds for the tab rectangle.
        Rectangle _tabBounds = tabControl1.GetTabRect(e.Index);
    
        if (e.State == DrawItemState.Selected)
        {
    
            // Draw a different background color, and don't paint a focus rectangle.
            _textBrush = new SolidBrush(Color.Red);
            g.FillRectangle(Brushes.Gray, e.Bounds);
        }
        else
        {
            _textBrush = new System.Drawing.SolidBrush(e.ForeColor);
            e.DrawBackground();
        }
    
        // Use our own font.
        Font _tabFont = new Font("Arial", 10.0f, FontStyle.Bold, GraphicsUnit.Pixel);
    
        // Draw string. Center the text.
        StringFormat _stringFlags = new StringFormat();
        _stringFlags.Alignment = StringAlignment.Center;
        _stringFlags.LineAlignment = StringAlignment.Center;
        g.DrawString(_tabPage.Text, _tabFont, _textBrush, _tabBounds, new StringFormat(_stringFlags));
    }
    
    Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem
        Dim g As Graphics = e.Graphics
        Dim _TextBrush As Brush
    
        ' Get the item from the collection.
        Dim _TabPage As TabPage = TabControl1.TabPages(e.Index)
    
        ' Get the real bounds for the tab rectangle.
        Dim _TabBounds As Rectangle = TabControl1.GetTabRect(e.Index)
    
        If (e.State = DrawItemState.Selected) Then
            ' Draw a different background color, and don't paint a focus rectangle.
            _TextBrush = New SolidBrush(Color.Red)
            g.FillRectangle(Brushes.Gray, e.Bounds)
        Else
            _TextBrush = New System.Drawing.SolidBrush(e.ForeColor)
            e.DrawBackground()
        End If
    
        ' Use our own font.
        Dim _TabFont As New Font("Arial", 10.0, FontStyle.Bold, GraphicsUnit.Pixel)
    
        ' Draw string. Center the text.
        Dim _StringFlags As New StringFormat()
        _StringFlags.Alignment = StringAlignment.Center
        _StringFlags.LineAlignment = StringAlignment.Center
        g.DrawString(_TabPage.Text, _TabFont, _TextBrush, _TabBounds, New StringFormat(_StringFlags))
    End Sub
    

Weitere Informationen