Instrukcje: wyświetlanie kart Side-Aligned za pomocą kontrolki TabControl
Właściwość Alignment dla TabControl umożliwia wyświetlanie kart pionowo (wzdłuż lewej lub prawej krawędzi elementu sterującego), w przeciwieństwie do poziomego (wzdłuż górnej lub dolnej części elementu). Domyślnie ten pionowy układ skutkuje słabym doświadczeniem użytkownika, ponieważ właściwość Text obiektu TabPage nie jest wyświetlana na karcie po włączeniu stylów wizualnych. Nie ma również bezpośredniego sposobu kontrolowania kierunku tekstu na karcie. Aby ulepszyć te wrażenia, możesz użyć rysowania własnego na TabControl.
Poniższa procedura przedstawia sposób renderowania tabulatorów wyrównanych do prawej z tekstem biegnącym od lewej do prawej, wykorzystując funkcję "rysowanie przez właściciela elementu".
Aby wyświetlić karty wyrównane do prawej
Dodaj TabControl do formularza.
Ustaw właściwość SizeMode na Fixed, tak aby wszystkie karty miały taką samą szerokość.
Ustaw właściwość ItemSize na preferowany stały rozmiar kart. Pamiętaj, że właściwość ItemSize zachowuje się tak, jakby zakładki były na górze, choć są wyrównane do prawej. W związku z tym, aby karty były szersze, należy zmienić właściwość Height, a aby były wyższe, należy zmienić właściwość Width.
Aby uzyskać najlepszy wynik z poniższym przykładem kodu, ustaw Width kart na 25, a Height na 100.
Ustaw właściwość DrawMode na wartość OwnerDrawFixed.
Zdefiniuj program obsługi dla zdarzenia DrawItem w TabControl, który renderuje tekst od lewej do prawej.
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
Zobacz też
.NET Desktop feedback