2

当标签被禁用时,我正在使用自定义标签来启用前景色(通过使用以下)

例如,当 autosize 关闭并且文本对齐设置为 TopCenter 时,如何将文本居中作为标准标签的中心?我已经使用对齐选项尝试了 StringFormat ,但这并没有与中心对齐。

    Protected Overrides Sub OnPaint(e As PaintEventArgs)
        Dim LabelBrush As New SolidBrush(Me.ForeColor)

        Dim SF As New StringFormat

        SF.FormatFlags = StringFormatFlags.NoWrap
        SF.Alignment = StringAlignment.Center
        SF.LineAlignment = StringAlignment.Center

        LabelBrush.Color = DisabledColor_Dark

        e.Graphics.DrawString(Me.Text, Me.Font, LabelBrush, Padding.Left, Padding.Right, SF)

        LabelBrush.Dispose()
        LabelBrush = Nothing
    End Sub
4

1 回答 1

1

使用这些填充变量时,DrawString 调用看起来不正确。

试试这个:

e.Graphics.DrawString(Me.Text, Me.Font, LabelBrush, Me.ClientRectangle, SF)

至于匹配 TopCenter 的 ContentAlignment 等,您必须根据您希望文本的显示方式相应地更改 Alignment 和 LineAlignment 属性。

另外,考虑使用TextRenderer而不是e.Graphics.DrawString(). 更好的输出。

TextRenderer.DrawText(e.Graphics, Me.Text, Me.Font, Me.ClientRectangle, _
                      DisabledColor_Dark, Color.Empty, _
                      TextFormatFlags.HorizontalCenter Or _
                      TextFormatFlags.VerticalCenter)
于 2012-09-24T13:08:23.630 回答