前言
在Winform应用程序开发中,透明窗体是一种常见的界面设计需求。透明窗体可以为用户提供更加个性化和美观的用户界面体验,同时也可以实现一些特殊效果,如半透明、渐变等。
本文将介绍一些实现Winform透明窗体的方式,帮助读者在自己的应用程序中实现透明窗体效果。我们将探讨两种常见的方法:使用窗体属性和使用API函数。
开发环境:.NET Framework版本:4.8
开发工具:Visual Studio 2022
实现步骤
第一种方式:使用窗体的
Opacity
属性,取值范围0~1,0表示透明,1表示不透明,除了设置0外基本是保持了窗体所有的事件(移动、点击、获取焦点、输入等),不过窗体上的所有子控件都会跟随窗体的透明度
private void button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.Show();
}
public Form2()
{
InitializeComponent();
Opacity = 0.5;
}
第二种方式:窗体的
TransparencyKey
属性,取值为颜色属性,当设置此属性后,窗体上所有与TransparencyKey
属性一样的颜色都会变成透明色(包括子控件)
public Form3()
{
InitializeComponent();
TransparencyKey = Color.Black;
BackColor = Color.Black;
}
第三种方式:使用WinApi函数,效果与设置
Opacity
属性类似,但针对事件处理等没有Opacity
效果好
private const int WS_EX_LAYERED = 0x80000;
private const int LWA_COLORKEY = 0x1;
private const int LWA_ALPHA = 0x2;
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll")]
private static extern bool SetLayeredWindowAttributes(IntPtr hWnd, int crKey, byte alpha, int dwFlags);
public Form4()
{
InitializeComponent();
// 设置窗体样式为 WS_EX_LAYERED
SetWindowLong(this.Handle, -20, WS_EX_LAYERED);
// 设置颜色键和透明度
SetLayeredWindowAttributes(this.Handle, Color.Black.ToArgb(), 128, LWA_COLORKEY | LWA_ALPHA);
}
最后,还有一种需求,就是如何实现窗体半透明而控件不透明的情况,这里建议使用窗体叠加来实现会简单些。
实现效果
-
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全