是否可以将 DateTimePicker 的文本居中?

Is it possible to center the text of DateTimePicker?

在我用 C# 编写的 Windows 表单应用程序中,我有一个 DateTimePicker 控件。我想将控件的文本部分居中,但这可能吗? 我现在的那个在左边有它的文字,在右边给出了很多space。

我试过了

myDateTimePicker.TextAlign = ContentAlignment.MiddleCenter;

但它给出了错误:

'System.Windows.Forms.DateTimePicker' does not contain a definition for 'TextAlign' and no extension method 'TextAlign' accepting a first argument of type 'System.Windows.Forms.DateTimePicker' could be found (are you missing a using directive or an assembly reference?)

我找不到任何似乎有效的 属性,而且我在 Internet 上的任何地方也找不到解决方案。这根本不可能吗?

您始终可以通过子类化 DateTimePicker 来覆盖 OnPaint 处理程序:

public class CenteredDateTimePicker : DateTimePicker
{
    public CenteredDateTimePicker()
    {
        SetStyle(ControlStyles.UserPaint, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle, new StringFormat
        {
            Alignment = StringAlignment.Center,
            LineAlignment = StringAlignment.Center
        });
    }
}

然而,这里并没有绘制滚动条,所以你可能需要临时凑合一下...

很遗憾,您无法在 Reference Source 上找到 DateTimePicker.OnPaint 的定义。

一个简单但不是很优雅的解决方案是在您的自定义格式中添加空格 属性 但是,如果您的 datetimepicker 大小是动态的,它不会相应地调整。