想了解怎么换皮肤的,请教下!(C#winform)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想了解怎么换皮肤的,请教下!(C#winform)相关的知识,希望对你有一定的参考价值。
c#winform皮肤制作(不要第三控件)
winform默认的控件有很样式是不能修改的,比如滚动条,窗体标题栏等,通常都是将原有的隐藏掉,然后自行绘制,再实现原有控件的一些事件。有很多第三方更换皮肤的控件,放大缩小的时候,这些重绘的地方都会有闪烁的情况发生,这都是因为窗体变化触发了重绘的方法导致的。 参考技术A 可以使用WPF技术来提高winform的外观。 参考技术B 更换皮肤就行了很简单的追问我知道,我是想问换肤的原理。谢谢
C#winform中,我想点击button1就将txt2的边框颜色改变,下面的代码可以实现:
但如果我将鼠标点一下txt2文本时,边框颜色就会恢复默认,请教一下应如何保持更改的边框颜色? 谢谢!
private void button1_Click(object sender, EventArgs e)
this.txt2_Paint(sender, new PaintEventArgs(this.txt2.CreateGraphics(), txt2.ClientRectangle));
private void txt2_Paint(object sender,PaintEventArgs e)
Pen pen = new Pen(Color.HotPink, 4.5f);
e.Graphics.DrawRectangle(pen,txt2.ClientRectangle );
pen.Dispose();
private static int WM_ERASEBKGND = 0x0014;
private static int WM_PAINT = 0x000F;
[DllImport("user32.dll")]
static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgnclip, uint fdwOptions);
[DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
protected override void WndProc(ref Message m)
base.WndProc(ref m);
if (m.Msg == WM_NCPAINT || m.Msg == WM_ERASEBKGND || m.Msg == WM_PAINT)
IntPtr hdc = GetDCEx(m.HWnd, (IntPtr)1, 1 | 0x0020);
if (hdc != IntPtr.Zero)
Graphics graphics = Graphics.FromHdc(hdc);
Color borderColor = Color.HotPink;
Rectangle rectangle = new Rectangle(textBox1.Location.X, textBox1.Location.Y + (25), textBox1.Width, textBox1.Height);
ControlPaint.DrawBorder(graphics, rectangle, borderColor, ButtonBorderStyle.Solid);
m.Result = (IntPtr)1;
ReleaseDC(m.HWnd, hdc);
------------------------------------------
用这种,不会闪,需要把textbook的边框去掉,Border设置为None。 然后自己调一下位置与宽度吧。 参考技术A 加上这段
private void txt2_Click(object sender, EventArgs e)
this.txt2_Paint(sender, new PaintEventArgs(this.txt2.CreateGraphics(), txt2.ClientRectangle));
不过这样当鼠标点击txt2的时候 边框会闪动一下、、追问
嗯,是会闪动一下,有更好的解决方案吗? 谢谢
以上是关于想了解怎么换皮肤的,请教下!(C#winform)的主要内容,如果未能解决你的问题,请参考以下文章
C#winform换肤问题:自己写了一个换肤的基类(SkinForm)是从Form继承的,如何能把所有的Form换成新的皮肤