教程参考文章:
https://blog.csdn.net/qq_27524749/article/details/99764804(vs2012)
*继续跟这位博主学习,并在其基础上修复了“启动时时钟不受控”的bug,并将“定时时间”的选择由选择框改为文本输入。
开始
一、设计窗体基本外形
具体操作可看上一篇学习笔记,这一步可熟悉对控件的编辑。
上面使用到的控件有:Label、TextBox、Button、ProgressBar、Timer。
二、编写程序
1、总窗口函数
实现目标:暂时暂停计时器
双击总窗体进入总窗体的响应函数,先在函数外定义整形变量count、time,再在总窗体中加入语句。
namespace exe2_timer
{
public partial class Form1 : Form
{
int count;
int time;
public Form1()
{
InitializeComponent();
}
//总窗口
private void Form1_Load(object sender, EventArgs e)
{
timer1.Stop();//暂停计时
}
}
}
控件中添加的定时器默认程序自动开启,这将使整体失去可控开关功能,因此需在此先停止定时器。
2、定时器函数
实现目标:显示剩余时间、进度条及时间到时的提示窗口
双击定时器控件进入函数编辑。
//定时器
private void timer1_Tick(object sender, EventArgs e)
{
count++;
label3.Text = (time - count).ToString() + "秒";//显示剩余时间
progressBar1.Value = count; //设置进度条的进度
if (count == time) //当时间到时
{
timer1.Stop(); //1、停止计时
System.Media.SystemSounds.Asterisk.Play(); //2、发出提示音
MessageBox.Show("时间到了!", "提示"); //3、弹出提示框
}
}
" ToString() "为转字符串,但是不加也可显示出数值的,这样比较规范。
3、“开始计时”按键函数
实现目标:读取文本框输入的数值,启动计时器
双击“开始计时”按键控件进入函数编辑。
//开始计时
private void button1_Click(object sender, EventArgs e)
{
string str = textBox1.Text; //将文本框内容添加到变量中
time = Convert.ToInt16(str.Substring(0, str.Length));//获取设定的定时时间值
progressBar1.Maximum = time; //进度条的最大数值
timer1.Start(); //开始计时
}
" ToInt16() " 为转16位整型," Substring(a,b) "为截取字符串,其中a为起始截取字符的位置,b为截取的长度。
4、“暂停计时”按键函数
实现目标:点击该按键时停止计时器,从而停止进度条及剩余时间的工作
双击“暂停计时”按键控件进入函数编辑。
//暂停计时
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop(); //停止计时
}
5、“复位”按键函数
实现目标:点击该按键时将所有参数初始化,并停止计时器
//复位
private void button3_Click(object sender, EventArgs e)
{
count = 0; //计数清零
string str = textBox1.Text; //将下拉内容添加到变量中
time = Convert.ToInt16(str.Substring(0, str.Length));//获取设定的定时时间值
progressBar1.Maximum = time; //进度条的最大数值
progressBar1.Value = 0; //进度条显示长度改为0
label3.Text = time + "秒"; //显示剩余时间
timer1.Stop(); //停止计时
}
6、文本框函数
实现目标:文本框内只能输入数字,输入其他字符无效(删除键除外)
更改文本框响应事件。
参考链接【http://www.classnotes.cn/4008.html】
响应事件更改前 | 响应事件更改后 |
---|---|
![]() | ![]() |
在“Form.cs[设计]界面”右下角点击闪电标识将文本框的响应事件由默认的“TextChanged事件”改为“KeyPress事件”
在更改后的响应函数中加入以下代码,以便实现将输入限定为数字。
//文本框
private void textBox1_(object sender, KeyPressEventArgs e)
{
if (e.KeyChar < '0' || e.KeyChar > '9' && e.KeyChar != 8) //如果读取0-9或删除键,
// 试了8、127都不能使用delete键,只能用fn+delete(macbook)
{
e.Handled = true;
}
}
注:
词 | 注释 |
---|---|
e | KeyPressEventArgs,携带了按键的信息 |
KeyChar | 代表按键所对应的字符 |
Handled | 看字面意思,操作过的=将这个操作的状态设为已处理过,自然就不会再处理了 |
三、编译程序
完成