小菜鸟求指点迷津

zeng0915 2014-09-11 04:40:47
这是我在网上找的一个简易闹钟提醒,根据设置的时间,会弹出一个提示窗口

代码:
int h = 0;
int m = 0;
private void button1_Click(object sender, EventArgs e)
{
//获取dateTimePicker1中的小时
h = dateTimePicker1.Value.Hour;

//获取dateTimePicker1中的分钟
m = dateTimePicker1.Value.Minute;

//让计时器开始运行
timer1.Enabled = true;

//启动计时器
timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
//判断当前时间是否等于设置的时间
if (DateTime.Now.Hour == h && DateTime.Now.Minute == m)
{
//弹出一个窗口提示用户时间到了
MessageBox.Show("当前时间:" + DateTime.Now + " 时间已到!");
//停止计时
timer1.Stop();

//关掉计时器
timer1.Enabled = false;

return ;
}
}
在这里有几个不明白的地方,希望大神们指点一下小的。。
1:为什么到了规定时间弹出窗口以后,没有按确定键,会不断的继续弹??

2,最后那里加个return的作用是什么?
...全文
301 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ_1964676117 2014-09-13
  • 打赏
  • 举报
回复
利用JavaScript实现状态栏显示时钟 <script type="text/javascript"> var timerID = null; var timerRunning = false; function startclock() { // 确认时钟已经停止。 stopclock(); // 显示出时钟。 showtime(); } function stopclock() { if (timerRunning) { clearTimeout(timerID); timerRunning = false; } } function showtime() { var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); var seconds = now.getSeconds(); var timeValue = "" + ((hours >12) ? hours -12 :hours); timeValue += ((minutes < 10) ? ":0" : ":") + minutes; timeValue += ((seconds < 10) ? ":0" : ":") + seconds; timeValue += (hours >= 12) ? " 下午" : " 上午"; // 将时间显示在浏览器窗口的状态行中。 window.status = timeValue; // 每一秒钟更新时间一次。 timerID = setTimeout("showtime()",1000); timerRunning = true; } </script>
puler 2014-09-12
  • 打赏
  • 举报
回复
这么热闹,插一脚
ZhongGuanYao 2014-09-12
  • 打赏
  • 举报
回复
四楼正解 将timer1的Interval属性设置为1000即可 return就是返回结束方法执行的意思,return语句后面的语句不会被执行 如果方法返回是void ,直接写成return; ,并且如果return;是方法最后一句,可以省略不写 如果方法返回不是空类型,return语句必写
zeng0915 2014-09-11
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
1.因为是先执行的messagebox,后执行的stop 而messagebox是模态窗体,会阻塞主线程,不点就不往下继续执行 所以不点,代码就会不断的执行,timer根本没有停下来 2.return根本没用 3.参考代码的时候,最好找个靠谱的源码参考 明显有很大的bug,你还觉得里面代码都是有用的吗?
意思是我把timer1.Stop();这个放到messagebox之前就可以吧? 我试了一下是可以,结果就弹了一个窗口
zeng0915 2014-09-11
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
1.因为是先执行的messagebox,后执行的stop 而messagebox是模态窗体,会阻塞主线程,不点就不往下继续执行 所以不点,代码就会不断的执行,timer根本没有停下来 2.return根本没用 3.参考代码的时候,最好找个靠谱的源码参考 明显有很大的bug,你还觉得里面代码都是有用的吗?
因为是菜鸟,所以很多不懂
zeng0915 2014-09-11
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
[quote=引用 4 楼 wind_cloud2011 的回复:] 你只考虑到 时分,没有考虑到秒,加上秒,就会只弹出一次,否则每秒会弹出一次来, /quote] 呵呵,要是弹出两次怎么办?要是根本不弹出(错过了时间)怎么办?
我加了秒,不能弹出来耶
  • 打赏
  • 举报
回复
[quote=引用 4 楼 wind_cloud2011 的回复:] 你只考虑到 时分,没有考虑到秒,加上秒,就会只弹出一次,否则每秒会弹出一次来, /quote] 呵呵,要是弹出两次怎么办?要是根本不弹出(错过了时间)怎么办?
阿道夫小狮子 2014-09-11
  • 打赏
  • 举报
回复
最后的return 就是返回的意识啊,要是是return 0;就是返回空,不返回。return 1;就是返回当前的数值,return x;就是返回变量的数字啊..
於黾 2014-09-11
  • 打赏
  • 举报
回复
或者可以加个变量控制一下 比如定义个old_h和old_m来存放上一次执行时的时间 然后先判断当前的小时和分钟是否和上一次执行时相等,不相等才执行 然后执行过后,给old_h和old_m赋值,让它重新相等. 这样可以做多个时间的判断,而不用关闭timer 关闭了timer,下次再到时间,就不能执行了
wind_cloud2011 2014-09-11
  • 打赏
  • 举报
回复
你只考虑到 时分,没有考虑到秒,加上秒,就会只弹出一次,否则每秒会弹出一次来, //判断当前时间是否等于设置的时间 if (DateTime.Now.Hour == h && DateTime.Now.Minute == m  && DateTime.Now.Second==s) 或者 string t = "";    t = dateTimePicker1.Value.ToString("HHmmss"); 用字符串方式,加上秒, DateTime dt = DateTime.Now; if (dt.ToString("HHmmss")==t) { MessageBox.Show("当前时间:" + DateTime.Now + " 时间已到!"); timer1.Stop(); timer1.Enabled = false; }
cancerser 2014-09-11
  • 打赏
  • 举报
回复
楼上说的对 最主要的原因是 你看当 //弹出一个窗口提示用户时间到了 MessageBox.Show("当前时间:" + DateTime.Now + " 时间已到!"); 弹出后,你要是不点确定,代码是不往下走的,定时器不会被关闭。 定时器在另一个线程中,所以不管你这边处理成啥样了,到点哥还跑,爱咋咋地
於黾 2014-09-11
  • 打赏
  • 举报
回复
1.因为是先执行的messagebox,后执行的stop 而messagebox是模态窗体,会阻塞主线程,不点就不往下继续执行 所以不点,代码就会不断的执行,timer根本没有停下来 2.return根本没用 3.参考代码的时候,最好找个靠谱的源码参考 明显有很大的bug,你还觉得里面代码都是有用的吗?
bdmh 2014-09-11
  • 打赏
  • 举报
回复
弹一次就别弹了,timer时间太短,导致1秒内会触发多次,可以自己做个变量,记录弹出时间,和是否弹出过,然后每次比对这个两个值,如果一样,就别弹了

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧