2

我有一个股票winform datetimepicker,看起来像这样...... winform 日期时间选择器

我想让它看起来像这样......

winform datetimepicker 修改

WinForm TextBox一个无边界选项,我手动创建了一个水平规则来给出无缝下划线的错觉,TextBoxDateTimePicker似乎没有无边界选项。

我可以做些什么来使DateTimePicker看起来像上面的示例,或者至少删除边框以便我可以手动放置下划线?

4

3 回答 3

0

使用最少代码的答案是放置一个面板,将控件放置在面板中,然后通过减小面板的大小来“剪裁” dateTimePicker (DTP) 的边框。

于 2017-03-20T16:48:48.403 回答
0

这是我能得到的最接近的:

您必须为下拉按钮制作图像。

在此处输入图像描述

public class SexyDateTimePicker : DateTimePicker
{
    public SexyDateTimePicker() : base()
    {
        this.SetStyle(ControlStyles.UserPaint, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.DrawLine(Pens.Black, 0, this.ClientSize.Height -1, this.ClientSize.Width, this.ClientSize.Height -1);
        e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(Color.Black), 0, 0);
        e.Graphics.DrawImage(Properties.Resources.DateOrTimePicker_675, new Point(this.ClientRectangle.X + this.ClientRectangle.Width - 16, this.ClientRectangle.Y));
    }

}
于 2017-03-17T14:32:55.640 回答
0

要实现控件的自定义外观,您必须重写 WndProc 方法,该方法处理此控件的所有窗口消息。

protected override void WndProc(ref Message m)
{
IntPtr hDC = GetWindowDC(m.HWnd);
Graphics gdc = Graphics.FromHdc(hDC);
switch (m.Msg)
{
case WM_NC_PAINT:
 SendMessage(this.Handle, WM_ERASEBKGND, hDC, 0);
 SendPrintClientMsg();
 SendMessage(this.Handle, WM_PAINT, IntPtr.Zero, 0);
 OverrideControlBorder(gdc);

 m.Result = (IntPtr)1; // indicate msg has been processed
 break;
case WM_PAINT: base.WndProc(ref m);
 OverrideControlBorder(gdc);
 OverrideDropDown(gdc);
 break;
  case  WM_NC_HITTEST:
 base.WndProc(ref m);
 if (DroppedDown)
  this.Invalidate(this.ClientRectangle, false);
 break;
default:
 base.WndProc(ref m);
 break;
}
ReleaseDC(m.HWnd, hDC);
gdc.Dispose();
}
于 2017-03-17T14:12:07.510 回答