Nasıl yapılır: TabControl ile Side-Aligned Sekmeleri Görüntüleme
TabControl'ın Alignment özelliği, yatay olarak (denetimin üst veya alt kısmı boyunca) değil, sekmelerin dikey olarak (denetimin sol veya sağ kenarı boyunca) görüntülenmesini destekler. Varsayılan olarak, görsel stiller etkinleştirildiğinde TabPage nesnesinin Text ö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 TabControl üzerinde özel çizimi kullanabilirsiniz.
Aşağıdaki yordamda, "kendi çizim" özelliğini kullanarak sekme metninin soldan sağa doğru göründüğü sağa hizalı sekmelerin nasıl oluşturulacağı gösterilmektedir.
Sağa hizalanmış sekmeleri görüntülemek için
Formunuza bir TabControl ekleyin.
tüm sekmelerin aynı genişlikte olması için SizeMode özelliğini Fixedolarak ayarlayın.
ItemSize özelliğini sekmeler için tercih edilen sabit boyuta ayarlayın. ItemSize özelliğinin, sekmeler sağ hizalanmış olsa da üstteymiş gibi davrandığını unutmayın. Sonuç olarak, sekmeleri genişletmek için Height özelliğini değiştirmeniz ve daha uzun olmalarını sağlamak için Width özelliğini değiştirmeniz gerekir.
Aşağıdaki kod örneğinde en iyi sonucu elde etmek için, sekmelerin Width 25, Height 100 olarak ayarlayın.
DrawMode özelliğini OwnerDrawFixedolarak ayarlayın.
TabControl'in DrawItem olayı için metni soldan sağa işleyen 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.
- TabControl Denetimi
.NET Desktop feedback