领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

自定义最大化、最小化和关闭按钮 -C#学习进阶

nixiaole 2025-08-01 19:58:17 知识剖析 2 ℃

实例说明

用户在制作应用程序时,为了使用户界面更加美观,一般都自已设计窗体的外观,以及窗体的最大化、最小化和关闭按钮。本实例通过资源文件来存储窗体的外观,及最大化、最小化和关闭按钮的图片,再通过鼠标移入、移出事件来实现按钮的动态效果。

技术要点

本实例使用资源文件来存储窗体外观、“最大化”、“最小化”和“关闭”按钮的图片,再用窗体的WindowState属性实现最大化、最小化和还原的操作。下面对其进行详细说明。

(1)资源文件

在加载图片时,如果是以本地资源进行加载,那么,在运行可执行文件时必须在当前目录下存放指定的图片,这样,会给用户带来不必要的麻烦,为了解决这一问题,本实例用资源文件来存储相关的图片。下面对资源文件的应用进行详细说明。

1.将图片存入资源文件中

将图片存入资源文件中的相关步骤如下:

①在“解决方案资源管理器”中打开Properties中的Resources.resx文件。

②在打开的Resources.resx文件中单击“添加资源”右侧的向下箭头,在下拉项中选择“添加现有文件”,弹出“将现有文件添加到资源中”窗体,在该窗体中将指定的图片添加到资源文件中。

2.读取资源文件中的图片

读取资源文件中的图片主要是用Properties命名空间下的Resources资源类。实现代码如下:

pictureBox.Image = Properties.Resources.最大化按钮;

注意:将图片添加到Resources.resx文件后,必须对整个项目进行保存,否则无法在Resources资源类中调用已添加的图片。

(2)WindowState属性

该属性用于获取或设置窗体的窗口状态。其常用语法如下:

public FormWindowState WindowState { get; set; }

l 属性值:FormWindowState,表示窗体的窗口状态。

FormWindowState的成员如表:

成员

说 明

Maximized

最大化的窗口

Minimized

最小化的窗口

Normal

默认大小的窗口

FormWindowState的成员及说明

例如,本实例中用WindowState属性使窗体最大化。代码如下:

Frm_Tem.WindowState = FormWindowState.Maximized;

开发步骤

(1)新建一个Windows应用程序,将其命名为“自定义最大化、最小化和关闭按钮”,默认窗体名为Form1,将Form1窗体的FormBorderStyle属性设置为None。

(2)Form1窗体主要用到的控件及说明如表所示。

Form1窗体主要用到的控件及说明:

控件名称

属性设置

说 明

panel_Title

Dock属性设置为Top

显示窗体标题栏

panel_ALL

Dock属性设置为Fill

显示标题栏下面的窗体

pictureBox_Min

Tag属性设置为0

显示最小化按钮

pictureBox_Max

Tag属性设置为1

显示最大化按钮

pictureBox_Close

Tag属性设置为2

显示关闭按钮

(3)主要程序代码。

在Form1窗体加载时,将资源文件中的图片添加到相应的PictuteBox和Panel控件中,代码如下:

private void Form1_Load(object sender, EventArgs e)

{

    this.Width = Properties.Resources.登录界面标题.Width;                        //设置体的宽度

    this.Height = Properties.Resources.登录界面标题.Height + Properties.Resources.登录界面下面.Height;//设置窗体的高度

    panel_Title.BackgroundImage = Properties.Resources.登录界面标题;             //显示窗体标题栏的图片

    panel_ALL.BackgroundImage = Properties.Resources.登录界面下面;             //显示窗体标题栏下同的图片

    pictureBox_Min.Image = null;//清空PictuteBox控件

    pictureBox_Min.Image = Properties.Resources.最小化按钮;                   //显示最小化按钮的图片

    pictureBox_Max.Image = null; //清空PictuteBox控件

    pictureBox_Max.Image = Properties.Resources.最大化按钮;                   //显示最大化按钮的图片

    pictureBox_Close.Image = null;                                              //清空PictuteBox控件

    pictureBox_Close.Image = Properties.Resources.关闭按钮;                     //显示关闭按钮的图片

}

在“关闭”按钮的鼠标移入、移出和单击事件中调用自定义方法FrmClickMeans和ImageSwitch,以实现按钮的相关操作。实现代码如下:

private void pictureBox_Close_Click(object sender, EventArgs e)                           //单击事件

{

    FrmClickMeans(this, Convert.ToInt16(((PictureBox)sender).Tag.ToString()));        //设置鼠标单击时按钮的图片

}

private void pictureBox_Close_MouseEnter(object sender, EventArgs e)                  //鼠标移入事件

{

    ImageSwitch(sender, Convert.ToInt16(((PictureBox)sender).Tag.ToString()), 0);   //设置鼠标移入后按钮的图片

}

private void pictureBox_Close_MouseLeave(object sender, EventArgs e)                 //鼠标移出事件

{

    ImageSwitch(sender, Convert.ToInt16(((PictureBox)sender).Tag.ToString()), 1);   //设置鼠标移出后按钮的图片

}

技巧:由于“最小化”、“最大化”和“关闭”按钮所使用的事件相同,所以将“最小化”和“最大化”按钮的事件指向“关闭”按钮的相关事件。

自定义方法ImageSwitch主要是在鼠标移入和移出控件时对图片进行切换。主要代码如下:

#region  控制图片的切换状态

/// <summary>

/// 控制图片的切换状态

/// </summary>

/// <param sender =" object ">要改变图片的对象</param>

/// <param n="int">标识</param>

/// <param ns="int">移出移入标识</param>

public static PictureBox Tem_PictB = new PictureBox();                         //实例化PictureBox控件

public void ImageSwitch(object sender, int n, int ns)

{

    Tem_PictB = (PictureBox)sender;

    switch (n)                                                                     //获取标识

    {

        case 0:                                                                          //当前为最小化按钮

            {

                Tem_PictB.Image = null;                                                 //清空图片

                if (ns == 0)                                                      //鼠标移入

                    Tem_PictB.Image = Properties.Resources.最小化变色;

                if (ns == 1)                                                      //鼠标移出

                    Tem_PictB.Image = Properties.Resources.最小化按钮;

                break;

            }

        case 1:                                                                          //最大化按钮

            {

                Tem_PictB.Image = null;

                if (ns == 0)

                    Tem_PictB.Image = Properties.Resources.最大化变色;

                if (ns == 1)

                    Tem_PictB.Image = Properties.Resources.最大化按钮;

                break;

            }

        case 2:                                                                          //关闭按钮

            {

                Tem_PictB.Image = null;

                if (ns == 0)

                    Tem_PictB.Image = Properties.Resources.关闭变色;

                if (ns == 1)

                    Tem_PictB.Image = Properties.Resources.关闭按钮;

                break;

            }

    }

}

#endregion

自定义方法FrmClickMeans主要用于设置窗体的最大化、最小化和关闭按钮的操作。主要代码如下:

#region  设置窗体的最大化、最小化和关闭按钮的单击事件

/// <summary>

/// 设置窗体的最大化、最小化和关闭按钮的单击事件

/// </summary>

/// <param Frm_Tem="Form">窗体</param>

/// <param n="int">标识</param>

public void FrmClickMeans(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;

    }

}

#endregion

最近发表
标签列表