Цвет вкладки TabControl_DrawItem справа налево - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь изменить цвет вкладки элемента управления вкладкой с помощью OwnerDrawFixed, и у меня этот код работает отлично, но у меня многоязычное приложение, и мне нужно изменить макет с лифта на право и справа налево, в зависимости от языка приложения Мне нужна помощь, чтобы заставить этот код засыпать справа налево, когда RightToLiftLayout = true, и слева направо (текущий код), когда его false.

спасибо.

'Firstly we'll define some parameters.
Dim CurrentTab As TabPage = TabControl1.TabPages(e.Index)
Dim ItemRect As Rectangle = TabControl1.GetTabRect(e.Index)
Dim FillBrush As New SolidBrush(Color.Red)
Dim TextBrush As New SolidBrush(Color.White)
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center

'If we are currently painting the Selected TabItem we'll 
'change the brush colors and inflate the rectangle.
If CBool(e.State And DrawItemState.Selected) Then
    FillBrush.Color = Color.White
    TextBrush.Color = Color.Red
    ItemRect.Inflate(2, 2)
End If

'Set up rotation for left and right aligned tabs
If TabControl1.Alignment = TabAlignment.Left Or TabControl1.Alignment = TabAlignment.Right Then
    Dim RotateAngle As Single = 90
    If TabControl1.Alignment = TabAlignment.Left Then RotateAngle = 270
    Dim cp As New PointF(ItemRect.Left + (ItemRect.Width \ 2), ItemRect.Top + (ItemRect.Height \ 2))
    e.Graphics.TranslateTransform(cp.X, cp.Y)
    e.Graphics.RotateTransform(RotateAngle)
    ItemRect = New Rectangle(-(ItemRect.Height \ 2), -(ItemRect.Width \ 2), ItemRect.Height, ItemRect.Width)
End If

'Next we'll paint the TabItem with our Fill Brush
e.Graphics.FillRectangle(FillBrush, ItemRect)

'Now draw the text.
e.Graphics.DrawString(CurrentTab.Text, e.Font, TextBrush, RectangleF.op_Implicit(ItemRect), sf)

'Reset any Graphics rotation
e.Graphics.ResetTransform()

'Finally, we should Dispose of our brushes.
FillBrush.Dispose()
TextBrush.Dispose()

1 Ответ

0 голосов
/ 16 апреля 2020

Это не проверено, но я думаю, что вы сможете изменить это:

Dim sf As New StringFormat

на это:

Dim sf = If(RightToLeft,
            New StringFormat(StringFormatFlags.DirectionRightToLeft),
            New StringFormat)

Возможно, вам придется использовать RightToLeftLayout вместо RightToLeft. Я не уверен, потому что это не то, что я когда-либо делал.

...