天天看点

【C#】Timer、窗体大小和屏幕大小

这也是很简单的事情,窗体大小能取就能用,屏幕大小用Screen.PrimaryScreen.Bounds.Width/Height;。在C#中的Timer其实与VB.NET的Timer差不多,《【Visual Basic】计时器与窗体屏幕尺寸的取法》(点击打开链接),下面用一个小例子还说明这个问题:

【C#】Timer、窗体大小和屏幕大小

如图,在一个窗体中有两个按钮,点击可以之后,窗体就开始横向增加大小,增大到当前屏幕大小的1/2就会开始缩小,直到宽度变成当前屏幕的1/4,则又开始重新变大。

窗体的布局如下图所示:

【C#】Timer、窗体大小和屏幕大小

先把Form1的MaximizeBox与MinimizeBox变成False。

之后拖入两个按钮,利用对其工具将其摆好,如《【C#】用组件的Anchor属性解决最大化组件的缩放问题》(点击打开链接)一样,将其Anchor从Top,left修改成Top,left,right,让宽度的变化自己随窗体的大小变化而变化。

最后拖入本文的主角——Timer,可以看到,这个timer是不占位置的,相当于一个在这个窗体内的小线程。

之后,点击这个Timer、两个Button,修改成如下的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Timer
{
    public partial class Form1 : Form
    {
        private bool flag = true;//用来指导这个窗体是增加还是减少

        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (flag)
            {
                this.Width += 4;//窗体宽度+4
                if (this.Width > Screen.PrimaryScreen.Bounds.Width / 2)//如果窗体的宽度达屏幕的1/2
                {
                    flag = false;//则窗体开始减少
                }
            }
            else
            {
                this.Width -= 4;
                if (this.Width < Screen.PrimaryScreen.Bounds.Width / 4)
                {
                    flag = true;
                }
            }
        }

        //计时器开始为不开启状态

        //开始计时器
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Interval = 50;//计时器的代码,每50毫秒也就是0.05s运行一次
            timer1.Enabled = true;
        }

        //关闭计时器
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }
    }
}