欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Winform中实现自定义屏保效果(附代码下载)

程序员文章站 2022-07-02 12:26:20
场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 新建form窗体,窗体中设计布局如下,一个Panel中拖拽四个label,然后添加两个Button,再添加一个T ......

场景

效果

Winform中实现自定义屏保效果(附代码下载)

 

 

注:

博客主页:

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

新建form窗体,窗体中设计布局如下,一个panel中拖拽四个label,然后添加两个button,再添加一个timer控件。

Winform中实现自定义屏保效果(附代码下载)

 

 

Winform中实现自定义屏保效果(附代码下载)

在窗体的load事件中将label进行隐藏

private void form1_load(object sender, eventargs e)
        {
            labelvisible(false);//隐藏要移动的文本
        }

 

public void labelvisible(bool n)
        {
            label1.visible = n;//隐藏或显示该控件
            label2.visible = n;
            label3.visible = n;
            label4.visible = n;
        }

 

在预览按钮的点击事件中,对预览进行初始化。

private void button1_click(object sender, eventargs e)
        {
            preview();//对预览进行初始化
        }

 

public void preview()
        {
            this.formborderstyle = formborderstyle.sizable;//使窗体有边框
            this.windowstate = formwindowstate.normal;//使窗体恢复默认大小
            this.backcolor = color.gainsboro;//设设置窗体的背景颜色
            panel1.visible = true;//显示该控件
            multimedia(panel1);//设置窗体中各控件的样式
            timer1.start();//启动计时器
        }

 

会首先执行设置窗体中各控件的样式的方法

public void multimedia(control panel)
        {
            labelvisible(true);//显示要移动的文本
            if (panel.name == "form1")//如果父级窗体是当前窗体
            {
                isbool = false;//隐藏
                fontsize = 20;//设置字体大小
            }
            else
            {
                isbool = true;//显示
                fontsize = 10;//设置字体大小
            }
            label1.text = "霸道的程序猿";//设置文本
            label1.parent = panel;//设置父级控件
            label1.font = new font("宋体", fontsize, fontstyle.bold);//设置字体样式
            label2.parent = panel;//设置父级控件
            label2.text = "氓" + "\n" + "流" + "\n" + "道" + "\n" + "霸";//设置纵向文本
            label2.font = new font("宋体", fontsize, fontstyle.bold);//设置字体样式
            label3.text = "猿序程的道霸";//设置文本
            label3.parent = panel;//设置父级控件
            label3.font = new font("宋体", fontsize, fontstyle.bold);//设置字体样式
            label4.text = "氓" + "\n" + "流" + "\n" + "道" + "\n" + "霸"; ;//设置纵向文本
            label4.parent = panel;//设置父级控件
            label4.font = new font("宋体", fontsize, fontstyle.bold);//设置字体样式
            panel.visible = isbool;//隐藏或显示
            button1.visible = isbool;//隐藏或显示
            button2.visible = isbool;//隐藏或显示
            label1.top = panel.height / 4;//设置当前控件的显示位置
            label3.top = (panel.height / 4) * 3;//设置当前控件的显示位置
            label3.left = 0 - label2.width;//设置当前控件的显示位置
            label4.left = (panel.width / 4) * 3;//设置当前控件的显示位置
            label4.top = 0 - label2.height;//设置当前控件的显示位置
            label2.left = panel.width / 4;//设置当前控件的显示位置
            frmcontainer = panel;//记录父级控件
        }

 

然后会启动计时器,在计时器执行的具体方法中

private void timer1_tick(object sender, eventargs e)
        {
            //文字从右到左滚动
            label1.left = label1.left - 2;//向左移动
            if ((label1.left + label1.width) < 1)//当超出左边界时
                label1.left = frmcontainer.width;//在右边出现
            //文字从下到上滚动
            label2.top = label2.top - 1;//向上移动
            if ((label2.top + label2.height) < 1)//当超出上边界时
                label2.top = frmcontainer.height;//在下边出现
            //文字从左到右滚动
            if (label3.left > frmcontainer.width)//如果超出右边界
                label3.left = 0 - label2.width;//在左边出现
            else
                label3.left = label3.left + 2;//向右移动
            //文字从上到下滚动
            if (label4.top > frmcontainer.height)//如果超出下边界
                label4.top = 0 - label4.height;//在上边出现
            else
                label4.top = label4.top + 1;//向下移动
            //如果在屏保情况下,鼠标移动
            if ((mouse.x != control.mouseposition.x || mouse.y != control.mouseposition.y) && panel1.visible == false)
                preview();//恢复预览状态
        }

 

在屏保按钮的点击事件中,就是将窗体的边框去掉,然后将窗体最大化。

 

private void button2_click(object sender, eventargs e)
        {
            this.formborderstyle = formborderstyle.none;//窗体无边框
            this.windowstate = formwindowstate.maximized;//窗体最大化
            this.backcolor = color.black;//设置窗体背景为黑色
            multimedia(this);//设置窗体中各控件的样式
            timer1.start();//启动计时器
            button1.visible = false;//隐藏
            button2.visible = false;//隐藏
            panel1.visible = false;//隐藏
            mouse = control.mouseposition;//获取鼠标的屏幕坐标
        }

 

代码下载

https://download.csdn.net/download/badao_liumang_qizhi/12028250