Bagikan melalui


Cara: Menampilkan Tab Side-Aligned dengan TabControl

Properti Alignment dukungan TabControl menampilkan tab secara vertikal (di sepanjang tepi kiri atau kanan kontrol), dibandingkan dengan horizontal (di bagian atas atau bawah kontrol). Secara default, tampilan vertikal ini menghasilkan pengalaman pengguna yang buruk, karena Text properti TabPage objek tidak ditampilkan di tab saat gaya visual diaktifkan. Juga tidak ada cara langsung untuk mengontrol arah teks di dalam tab. Anda dapat menggunakan gambar pemilik TabControl untuk meningkatkan pengalaman ini.

Prosedur berikut menunjukkan cara merender tab rata kanan, dengan teks tab berjalan dari kiri ke kanan, dengan menggunakan fitur "gambar pemilik".

Untuk menampilkan tab rata kanan

  1. TabControl Tambahkan ke formulir Anda.

  2. Atur properti Alignment ke Right.

  3. Atur SizeMode properti ke Fixed, sehingga semua tab memiliki lebar yang sama.

  4. Atur ItemSize properti ke ukuran tetap pilihan untuk tab. Perlu diingat bahwa ItemSize properti bersifat seolah-olah tab berada di atas, meskipun selaras dengan kanan. Akibatnya, untuk membuat tab lebih lebar, Anda harus mengubah Height properti , dan untuk membuatnya lebih tinggi, Anda harus mengubah Width properti .

    Untuk hasil terbaik dengan contoh kode di bawah ini, atur Width tab ke 25 dan ke Height 100.

  5. Atur properti DrawMode ke OwnerDrawFixed.

  6. Tentukan handler untuk DrawItem peristiwa TabControl yang merender teks dari kiri ke kanan.

    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
    

Baca juga