所谓的变色就是当检测到鼠标上划或离开时触发事件,这里触发的事件就是把图片换掉
1 创建一个窗体项目(本项目是在VS2015中进行创建)
2 将窗体的FormBorderStyle属性设置为None,设置后窗体的标题栏将消失不显示
3 添加2个panel空间,如下图布置,上面一个panel作为标题栏,下面一个panel作为窗体内容显示区
4 添加3个pictureBox空间,作为最大化、最小化、关闭按钮的容器,如下图:
5 准备最大化、最小化、关闭按钮的图片,如果需要边框也需要提前准备
6 向项目中添加资源文件
右击-->添加-->新项目-->资源文件-->添加资源-->图片
或者可以通过向空间插入的图片的方法添加
7 编写代码
7.1 设置窗体加载时加载图片,找到窗体的加载(LOAD)事件
7.2 将最大化、最小化、关闭按钮的Click事件都设置为pictureBox_Click
7.3 添加代码
private void Form1_Load(object sender, EventArgs e)
{
//设置大小
this.Width = Resource1.登录界面标题.Width;
this.Height = Resource1.登录界面下面.Height + Resource1.登录界面标题.Height;
pictureBox_Min.Width = Resource1.最小化按钮.Width;
pictureBox_Min.Height = Resource1.最小化按钮.Height;
pictureBox_Max.Width = Resource1.最大化按钮.Width;
pictureBox_Max.Height = Resource1.最大化按钮.Height;
pictureBox_Close.Width = Resource1.关闭按钮.Width;
pictureBox_Close.Height = Resource1.关闭按钮.Height;
//设置图
panel_Title.BackgroundImage = Resource1.登录界面标题;
panel_ALL.BackgroundImage = Resource1.登录界面下面;
pictureBox_Min.Image = null;
pictureBox_Min.Image = Resource1.最小化按钮;
pictureBox_Max.Image = null;
pictureBox_Max.Image = Resource1.最大化按钮;
pictureBox_Close.Image = null;
pictureBox_Close.Image = Resource1.关闭按钮;
//设置最大化、最小化、关闭按钮的Tag值
pictureBox_Min.Tag = 0;
pictureBox_Max.Tag = 1;
pictureBox_Close.Tag = 2
}
7.4 鼠标点击事件的获取
/// <summary>
/// 鼠标对最大化、最小化、关闭按钮的点击事件
/// </summary>
/// <param name="frm_Tem"></param>
/// <param name="n"></param>
public void PicClickMenus(Form frm_Tem, int n)
{
switch (n)
{
case 0:
frm_Tem.WindowState = FormWindowState.Minimized;
break;
case 1:
{
if (frm_Tem.WindowState == FormWindowState.Maximized)
{
frm_Tem.WindowState = FormWindowState.Normal;
}
else
{
frm_Tem.WindowState = FormWindowState.Maximized;
}
break;
}
case 2:
frm_Tem.Close();
break;
}
}
7.5 鼠标点击事件
//最大化、最小化、关闭按钮的点击事件
private void pictureBox_Click(object sender, EventArgs e)
{
PicClickMenus(this, Convert.ToInt16(((PictureBox)sender).Tag.ToString()));
Console.WriteLine(Convert.ToInt16(((PictureBox)sender).Tag.ToString()));
}
7.6 鼠标上划事件
/// <summary>
/// 鼠标事件
/// </summary>
/// <param name="sender"></param>
/// <param name="n"></param>
/// <param name="ns"></param>
public static PictureBox pic = new PictureBox();
public void ImageSwitch(object sender, int n, int ns)
{
pic = (PictureBox)sender;
switch (n)
{
case 0:
{
pic.Image = null;
if (ns == 0)
{
pic.Image = Resource1.最小化变色;
}
if(ns == 1)
{
pic.Image = Resource1.最小化按钮;
}
break;
}
case 1:
{
pic.Image = null;
if (ns == 0)
{
pic.Image = Resource1.最大化变色;
}
if (ns == 1)
{
pic.Image = Resource1.最大化按钮;
}
break;
}
case 2:
{
pic.Image = null;
if (ns == 0)
{
pic.Image = Resource1.关闭变色;
}
if (ns == 1)
{
pic.Image = Resource1.关闭按钮;
}
break;
}
}
}
7.7 鼠标上划触发
//最大化、最小化、关闭按钮的鼠标进入事件
private void pictureBox_MoseEnter(object sender, EventArgs e)
{
ImageSwitch(sender, Convert.ToInt16(((PictureBox)sender).Tag.ToString()), 0);
}
//最大化、最小化、关闭按钮的鼠标离开事件
private void pictureBox_MoseLeave(object sender, EventArgs e)
{
ImageSwitch(sender, Convert.ToInt16(((PictureBox)sender).Tag.ToString()), 1);
}