想了解怎么换皮肤的,请教下!(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_NCPAINT = 0x0085;
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换成新的皮肤

怎么使用Winform的皮肤文件?

winform换肤怎么做?是要有一个控件,还是要自己写啥类?请详细说明下,先谢了

C#Winform怎么弄这种效果的UI?

请教Winform进度条怎样改变颜色

winform窗体怎么添加皮肤