Postupy: Zobrazení bočně zarovnaných karet pomocí TabControl

Vlastnost AlignmentTabControl podporuje zobrazení karet svisle (podél levého nebo pravého okraje ovládacího prvku), nikoli vodorovně (přes horní nebo dolní okraj ovládacího prvku). Ve výchozím nastavení má toto svislé zobrazení za následek špatné uživatelské prostředí, protože Text vlastnost objektu TabPage se nezobrazuje na kartě, pokud jsou povoleny styly vizuálů. Neexistuje také přímý způsob, jak řídit směr textu na kartě. K vylepšení tohoto prostředí můžete použít kreslení TabControl vlastníka.

Následující postup ukazuje, jak vykreslit karty zarovnané doprava s textem karty spuštěným zleva doprava pomocí funkce "vlastník kreslení".

Zobrazení karet zarovnaných doprava

  1. Přidejte ho TabControl do formuláře.

  2. Nastavte vlastnost Alignment na Right.

  3. SizeMode Nastavte vlastnost na Fixedhodnotu , aby všechny karty byly stejné šířky.

  4. ItemSize Nastavte vlastnost na upřednostňovanou pevnou velikost karet. Mějte na paměti, že se ItemSize vlastnost chová, jako kdyby byly karty nahoře, i když jsou zarovnané doprava. V důsledku toho je nutné, aby byly karty širší, musíte změnit Height vlastnost a aby byly vyšší, musíte změnit Width vlastnost.

    Nejlepší výsledek dosáhnete v následujícím příkladu kódu tak, že Width nastavíte tabulátory na 25 a Height na 100.

  5. Nastavte vlastnost DrawMode na OwnerDrawFixed.

  6. Definujte obslužnou rutinu DrawItem pro událost TabControl , která vykreslí text zleva doprava.

    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
    

Viz také