# CSharp_TransparentForm
**Repository Path**: main_i/CSharp_TransparentForm
## Basic Information
- **Project Name**: CSharp_TransparentForm
- **Description**: c# 透明窗体 类似加速器效果
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-08-12
- **Last Updated**: 2024-06-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# CSharp_TransparentForm
# C# 学习笔记(10)加速球
>利用窗体透明和GIF透明背景,实现加速球类似效果(QQ宠物,老年人大概也知道)
>

1. 新建一个工程winForm工程
2. 设置窗体属性
>设置窗体大小(和你找的GIF大小相同即可)
>设置窗体出现位置(屏幕中心)
>设置窗体不会出现在任务栏上
>设置窗体在桌面最顶层(不会被其他应用程序界面遮住)
>设置窗体背景透明色(和窗体背景色一样)
>设置窗体格式(无边框)

>这时窗体就是一个白板

3. 添加控件label(只有label可以直接让GIF动态显示)
>将label控件的自动大小属性关掉
>设置label控件的位置和大小(大于等于GIF大小)
>设置label控件的背景图片(一定要是透明背景的GIF(不是白色背景是透明背景的))
>将文本属性设置为空

4. 点击运行,就会出现一个和加速球效果类似的悬浮窗
>但是现在还有一些问题:
>1. 运行后无法移动位置
>2. 鼠标移上去后想要切换动作
>3. 打开后不能关闭
5. 添加鼠标事件,运行后可以拖动
>选中label控件,给label添加鼠标按下事件、移动事件和弹起事件

```csharp
///
/// 记录鼠标按下坐标
///
Point startPoint = new Point();
///
/// 记录鼠标左键是否已经按下
///
bool isDown = false;
///
/// 鼠标按下回调函数
///
///
///
private void labGIF_MouseDown(object sender, MouseEventArgs e)
{
//左键按下 记住按下坐标
if(e.Button is MouseButtons.Left)
{
startPoint = e.Location;
isDown = true;
}
}
///
/// 鼠标弹起回调函数
///
///
///
private void labGIF_MouseUp(object sender, MouseEventArgs e)
{
//左键弹起 清除按下标志位
if (e.Button is MouseButtons.Left)
{
isDown = false;
}
}
///
/// 鼠标在控件上移动回调函数
///
///
///
private void labGIF_MouseMove(object sender, MouseEventArgs e)
{
//左键移动 修改窗体坐标
if (e.Button is MouseButtons.Left && isDown)
{
this.Location = this.PointToScreen(new Point(e.X - startPoint.X, e.Y - startPoint.Y));
}
}
```
6. 鼠标放到窗体上,更换GIF效果
>选中label控件,给label添加MouseEnter事件和MouseLeave事件
>就是当鼠标进入控件时,给label换一张背景图
>当然也可以自己添加一些其他的,比如双击或者什么的

```csharp
///
/// 当鼠标划过 更换gif
///
///
///
private void labGIF_MouseEnter(object sender, EventArgs e)
{
labGIF.Image = Properties.Resources.鼠标滑过;
}
///
/// 当鼠标离开控件 更换GIF
///
///
///
private void labGIF_MouseLeave(object sender, EventArgs e)
{
labGIF.Image = Properties.Resources.正常状态;
}
```
7. 推出程序
>拖一个右键菜单到窗体上

>将刚才拖的右键菜单和label关联起来

>给右键菜单注册单击事件

```csharp
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
```
[源码地址](https://github.com/mian2018/CSharp_TransparentForm)https://github.com/mian2018/CSharp_TransparentForm