Nasıl yapılır: TabControl ile Yana Hizalanmış Sekmeler Görüntüleme

AlignmentÖzelliği dikey olarak TabControl sekmelerin (denetimin sol veya sağ kenarı boyunca) yatay olarak (denetimin üst veya alt kısmında) farklı şekilde görüntülenmesini destekler. Varsayılan olarak, bu dikey görüntü kötü bir kullanıcı deneyimine neden olur, çünkü Text TabPage nesnenin özelliği görsel stiller etkinken sekmesinde görüntülenmez. Ayrıca, sekmenin içindeki metnin yönünü denetlemek için doğrudan bir yol yoktur. Bu deneyimi geliştirmek için, sahip çizimi ' ni kullanabilirsiniz TabControl .

Aşağıdaki yordamda, "sahip Çiz" özelliği kullanılarak, sağdan sola doğru şekilde çalışan sekme metni ile sağa hizalanmış sekmelerin nasıl oluşturulduğu gösterilmektedir.

Sağa hizalanmış sekmeleri görüntüleme

  1. Formunuza bir ekleyin TabControl .

  2. AlignmentÖzelliğini olarak ayarlayın Right .

  3. SizeModeTüm sekmelerin aynı genişlikte olması için özelliğini olarak ayarlayın Fixed .

  4. Özelliği, ItemSize sekmeler için tercih edilen sabit boyuta ayarlayın. ItemSizeÖzelliğin, sağa hizalı olsa da, sekmelerin en üstte yer aldığı gibi davrandığını aklınızda bulundurun. Sonuç olarak, sekmeleri daha geniş hale getirmek için özelliği değiştirmelisiniz ve bu özellikleri büyük Height hale getirmek için özelliği değiştirmeniz gerekir Width .

    Aşağıdaki kod örneği ile en iyi sonuç için, Width sekmelerin sayısını 25 ve Height 100 olarak ayarlayın.

  5. DrawModeÖzelliğini olarak ayarlayın OwnerDrawFixed .

  6. DrawItemMetni soldan sağa işleyen olay için bir işleyici tanımlayın TabControl .

    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
    

Ayrıca bkz.