最近疫情严重,在家呆着也是呆着,于是就想学一下上位机的编写,权衡利弊之后,选择了C#语言,原因是据说它写出来的上位机比较小,不占内存。开发环境就用VS吧,用的人挺多的。好了,进入正题。此帖子为记录贴,要是没能帮助到你,请多多见谅。
开发环境:
Windows10操作系统
Visual Studio 2015社区版
第一步:百度搜索VS2015C#开发环境的搭建,总计起来一句话就是:默认配置换个路径
1.1 启动之后如下图所示,是2015社区版吧,我没骗你。
1.2 打开我们的VS2015以后,接着就是新建项目啦,也可以在菜单栏:文件-新建-项目完成此操作
1.3 我们要写的就是windows窗体应用程序啦,按照下图说的来就好了,其他不用变,到这里,我们就创建好了一个新的窗体项目
最后我们来看一下,完成之后的样子,我在这里列出了一些常用功能的说明,抛砖引玉一波,(●ˇ∀ˇ●)
第二步:构思一下一个倒计时小程序长什么样子。
2.1 应该有个输入框,可以输入要计时的数字对吧,还应该有个启动按钮对吧....我的比较简单,大概长下面的样子
除了图片上文字说明的控件外,还有不可见控件,分别是定时器和提示文本框。
这两个有什么用呢?先说提示文本框吧,用户在输入需要计时的数字时候,有可能不按规矩来或者误输入,比如输入“0”秒,这个
时候咋办呢?一方面我们可以在软件中对其限制,另外我们也可以使用温馨提示,告知用户不能随便输入。这个东西就是做这个
用的。
至于定时器,很简单,既然我们要计时,肯定要使用它。定时器还有一个中断服务函数,就是在设定的定时时间到之时,自动调
用这个服务函数,学过单片机的朋友应该很容易就理解了,要是你是个萌新,也不要紧,你就记住,定时到就会调用它。
第三步,构思交互过程,编写代码
3.1假设你是这个倒计时器的使用者,你会怎么做?把这个过程想清楚。
先来粗略的,输入框输入计时,点击开始计时,进度条移动,定时时间到,停止计时并提醒
3.1.1 双击控件,就会进入该控件被点击时候调用的函数,这里做个说明,控件属性是控件对控件本身的配置
而事件是指对控件进行什么样的操作,它会自动生成一个函数,函数里就是我们要写的这个动作之后要做的事。
比如我使用了点击按钮这一事件,在事件函数里,我启动了定时器。
3.1.2 定时器和复选框注意事项
定时器:需要在Interval一栏设置中断时间,单位是ms毫秒
定时器中断服务函数:timerx_Tick(object sender, EventArgs e),下面是我的源码
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.PerformStep();//进度条递增
label3.Text = Convert.ToString(time_dec--) + (" 秒"); //显示递减
if ((time_dec) == -1)
{
timer1.Stop();//停止计时
button1.Text = "开始计时"; //转换显示按钮
MessageBox.Show("您设定的时间到了!");//提示框
progressBar1.Value = 0; //清空进度条
}
}
复选框:有多种类型,我们需要的是带下拉列表的,按图示配置
3.2 我们来尝试写一下“开始计时”按钮的事件函数,也就是我们在按下按钮时候会发生什么事情,双击按钮进入点击事件函数,
你会发现系统自动产生了一个函数button1_Click_1,由于我之前改动过,名字有点不一样。函数名很直白了,按钮1单击。哈哈
哈,你会发现所有的函数名都和这个类似。那我们就写一下按下按钮会发生什么吧。
//开始按钮事件函数
private void button1_Click_1(object sender, EventArgs e)
{
//这里限制了输入只能是数字
if (textBox1.Text == string.Empty || textBox1.Text == "0")
{
MessageBox.Show("请输入正确数值!"); //弹框提醒
return;
}
button1.Text = "停止计时"; //变换按钮显示文字
Button_Con_Flag = !Button_Con_Flag;
progres_bar_display(); //运行自定义函数
timer1.Start(); //启动定时器
if (Button_Con_Flag) //点击停止按钮
{
timer1.Stop(); //关闭定时器
progressBar1.Value= 0; //清空进度条
label3.Text = "0 秒"; //提示文本归零
button1.Text = "开始计时"; //转换显示按钮
}
}
3.2.1 说一下进度条配置相关函数
progressBar1.Minimum = 0; //最小值或者起点配置
progressBar1.Maximum = max; //最大值或终点值配置
progressBar1.Value = 1; //进度条显示1开0关
progressBar1.Step = 1; //步进值
progressBar1.PerformStep();//进度条递增显示
附上源代码:
以下函数在Form1.cs中
namespace COMHELPER
{
public partial class Form1 : Form
{
bool Button_Con_Flag = true;
Int64 time_dec = 0;
public Form1()
{
InitializeComponent();
}
//整个窗体初始化配置
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Text = "秒"; //初始化复选框
label3.Text = "0 秒"; //动态零点
}
//时基复选框
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
label3.Text = "0 " + comboBox1.Text;//文本框
}
//开始按钮
private void button1_Click_1(object sender, EventArgs e)
{
//首先判断输入是否正确
if (textBox1.Text == string.Empty || textBox1.Text == "0")
{
MessageBox.Show("请输入正确数值!");
return;
}
button1.Text = "停止计时"; //变换按钮显示文字
Button_Con_Flag = !Button_Con_Flag;
progres_bar_display(); //运行自定义函数
timer1.Start();
if (Button_Con_Flag) //点击停止按钮
{
timer1.Stop(); //关闭定时器
progressBar1.Value= 0; //清空进度条
label3.Text = "0 秒"; //提示文本归零
button1.Text = "开始计时"; //转换显示按钮
}
}
//限制输入类型为纯数字
//禁止输入0或者不输入
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = e.KeyChar < '0' || e.KeyChar > '9'; //允许输入数字
if (e.KeyChar == (char)8) //允许输入回退键
{
e.Handled = false;
}
}
private void label3_Click(object sender, EventArgs e)
{
}
//定时器中断
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.PerformStep();//进度条递增
label3.Text = Convert.ToString(time_dec--) + (" 秒"); //显示递减
if ((time_dec) == -1)
{
timer1.Stop();//停止计时
button1.Text = "开始计时"; //转换显示按钮
MessageBox.Show("您设定的时间到了!");//提示框
progressBar1.Value = 0; //清空进度条
}
}
//自定义函数
//函数名称:progres_bar_display()
//参数类型:empty
//函数功能:从输入框获取定时值
private void progres_bar_display()
{
int[] max_base = new int[3] { 1, 60, 3600};
progressBar1.Minimum = 0;
progressBar1.Maximum = (max_base[ comboBox1.SelectedIndex])*Convert.ToInt16(textBox1.Text);
time_dec = (max_base[comboBox1.SelectedIndex])*Convert.ToInt16(textBox1.Text)-1;
progressBar1.Value = 1;
progressBar1.Step = 1;
}
private void textBox1_MouseHover(object sender, EventArgs e)
{
toolTip1.SetToolTip(this.textBox1, @"请输入大于“0”的数字");
}
}
}
4.实际使用效果
|
请发表评论