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

özelliğiTabControl, Alignment yatay olarak (denetimin üst veya alt kısmı boyunca) aksine sekmelerin dikey olarak (denetimin sol veya sağ kenarı boyunca) görüntülenmesini destekler. Varsayılan olarak, görsel stiller etkinleştirildiğinde nesnenin TextTabPage özelliği sekmede görüntülenmediğinden, bu dikey görüntü kötü bir kullanıcı deneyimine neden olur. Sekmedeki metnin yönünü denetlemenin doğrudan bir yolu da yoktur. Bu deneyimi geliştirmek için sahip çizimlerini TabControl kullanabilirsiniz.

Aşağıdaki yordamda, "sahip çizim" özelliğini kullanarak sekme metni soldan sağa doğru çalışırken sağa hizalanmış sekmelerin nasıl işlendiği gösterilmektedir.

Sağa hizalanmış sekmeleri görüntülemek için

  1. Formunuza bir TabControl ekleyin.

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

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

  4. ItemSize özelliğini sekmeler için tercih edilen sabit boyuta ayarlayın. Özelliğin ItemSize , sekmeler sağ hizalanmış olsa da üstteymiş gibi davrandığını unutmayın. Sonuç olarak, sekmeleri genişletmek için özelliğini değiştirmeniz Height ve daha uzun olmalarını sağlamak için özelliğini değiştirmeniz Width gerekir.

    Aşağıdaki kod örneğiyle en iyi sonucu elde etmek için, sekmelerin değerini 25 ve Height 100 olarak ayarlayınWidth.

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

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

    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.