【问题标题】:Is it possible to center the text of DateTimePicker?是否可以将 DateTimePicker 的文本居中?
【发布时间】:2018-03-22 08:39:08
【问题描述】:

在我用 C# 编写的 Windows 窗体应用程序中,我有一个 DateTimePicker 控件。我想将控件的文本部分居中,但这可能吗? 我当前的文本在左侧,在右侧留出了很大的空间。

我试过了

myDateTimePicker.TextAlign = ContentAlignment.MiddleCenter;

但它给出了错误:

“System.Windows.Forms.DateTimePicker”不包含“TextAlign”的定义,并且找不到接受“System.Windows.Forms.DateTimePicker”类型的第一个参数的扩展方法“TextAlign”(您是否缺少using 指令还是程序集引用?)

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

【问题讨论】:

  • 在旧的 WinForms 中可能无法做到。考虑切换到 WPF,您可以在其中设置样式/自定义控件。
  • 总是有可能的......但并不总是那么简单。例如,您可以覆盖 OnPaint 处理程序,但由于您不能依赖基础 Paint,因此您可以在任何情况下绘制所有内容。

标签: c# winforms datetimepicker text-alignment


【解决方案1】:

您始终可以通过子类化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 的定义。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2020-11-26
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2011-11-27
    相关资源
    最近更新 更多