900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > (C#)Winform修改DateTimePicker控件的背景色Winform中日期控件DateTimePicker默认是不

(C#)Winform修改DateTimePicker控件的背景色Winform中日期控件DateTimePicker默认是不

时间:2020-04-03 07:52:46

相关推荐

(C#)Winform修改DateTimePicker控件的背景色Winform中日期控件DateTimePicker默认是不

(C#)Winform修改DateTimePicker控件的背景色Winform中日期控件DateTimePicker默认是不能修改背景色和边框色的,如果想要改变它的背景色和边框色那也是有办法的,只需要继承DateTimePicker做一个自定义控件,再重写WndProc方法。此外还要重写属性,这样就可以在外部修改它的颜色了。 自定义控件的完整代码如下: public class UCDateTime : DateTimePicker{ [DllImport("user32.dll", EntryPoint = "SendMessageA")]private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, object lParam);[DllImport("user32")]private static extern IntPtr GetWindowDC(IntPtr hWnd);[DllImport("user32")]private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);const int WM_ERASEBKGND = 0x14;const int WM_NC_PAINT = 0x85;const int WM_PAINT = 0xF;const int WM_PRINTCLIENT = 0x318;//边框颜色private Pen BorderPen = new Pen(SystemColors.ControlDark, 2);/// <summary>/// 定义背景色私有变量/// </summary>private Color _backColor = Color.White;/// <summary>/// 定义背景色属性/// </summary>public override Color BackColor{get{return _backColor;}set{_backColor = value;}}protected override void WndProc(ref System.Windows.Forms.Message m){IntPtr hDC = IntPtr.Zero;Graphics gdc = null;switch (m.Msg){//画背景色case WM_ERASEBKGND:gdc = Graphics.FromHdc(m.WParam);gdc.FillRectangle(new SolidBrush(_backColor), new Rectangle(0, 0, this.Width, this.Height));gdc.Dispose();break;case WM_NC_PAINT:hDC = GetWindowDC(m.HWnd);gdc = Graphics.FromHdc(hDC);SendMessage(this.Handle, WM_ERASEBKGND, hDC, 0);SendPrintClientMsg();SendMessage(this.Handle, WM_PAINT, IntPtr.Zero, 0);m.Result = (IntPtr)1; // indicate msg has been processedReleaseDC(m.HWnd, hDC);gdc.Dispose();break;//画边框case WM_PAINT:base.WndProc(ref m);hDC = GetWindowDC(m.HWnd);gdc = Graphics.FromHdc(hDC);OverrideControlBorder(gdc);ReleaseDC(m.HWnd, hDC);gdc.Dispose();break;default:base.WndProc(ref m);break;}}private void SendPrintClientMsg(){// We send this message for the control to redraw the client areaGraphics gClient = this.CreateGraphics();IntPtr ptrClientDC = gClient.GetHdc();SendMessage(this.Handle, WM_PRINTCLIENT, ptrClientDC, 0);gClient.ReleaseHdc(ptrClientDC);gClient.Dispose();}private void OverrideControlBorder(Graphics g){g.DrawRectangle(BorderPen, new Rectangle(0, 0, this.Width, this.Height));}}

(C#)Winform修改DateTimePicker控件的背景色Winform中日期控件DateTimePicker默认是不能修改背景色和边框色的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。