当前位置:编程学习 > C#/ASP.NET >>

这段代码缺点什么 ?

  private void timer1_Tick(object sender, EventArgs e)
        {
            #region 时间设置
            int time = 0;
            int Hour = time / 3600;
            int Minute = time / 60;
                time++;

         toolLbl_time.Text ="在线时间:{0}小时{1}分钟", Hour.ToString(), Minute.ToString();
           
            
            

            
            #endregion

        }
--------------------编程问答-------------------- 这段代码执行结果是:一直显示为:0小时0分,原因是你的time变量定义的位置不对。 --------------------编程问答-------------------- 楼上说得没错。再说你的time变量的数据类型也有问题。

应该这样:

DateTime t1 = DateTime.Now; //取得开始时间

//执行某些功能

DateTime t1 = DateTime.Now; //取得结束时间

TimeSpan t0 = t2 - t1;    //取得时间差

//取得时间差的小时数和分钟数(秒数)
toolLbl_time.Text = t0.Hours.ToString()+" hours "+t0.Minutes.ToString()+" min";



还有一种方法:
TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks); 
参见:
http://hi.baidu.com/%B5%C8%B4%FD%D4%B6%B7%BD/blog/item/73bcbb3d1f2ba80abba16719.html --------------------编程问答-------------------- 问题出在int time = 0,不应该定义在timer中,这样每执行一次time都会被清0。
解决建议,可以将time变量提到timer外面
--------------------编程问答-------------------- 问题出在int time = 0,不应该定义在timer中,这样每执行一次time都会被清0。
解决建议,可以将time变量提到timer外面
--------------------编程问答-------------------- 问题出在int time = 0,不应该定义在timer中,这样每执行一次time都会被清0。
解决建议,可以将time变量提到timer外面
--------------------编程问答-------------------- 执行后,初始为默认值
全局变量等
web session等保存 --------------------编程问答-------------------- 楼上都是正解呀 --------------------编程问答-------------------- 没有开始时间 --------------------编程问答--------------------
引用 2 楼 torontosky 的回复:
楼上说得没错。再说你的time变量的数据类型也有问题。

应该这样:

DateTime t1 = DateTime.Now; //取得开始时间

//执行某些功能

DateTime t1 = DateTime.Now; //取得结束时间

TimeSpan t0 = t2 - t1; //取得时间差

//取得时间差的小时数和分钟数(秒数)
toolLbl_time.……


哥们好好看看吧.你写的很有问题. --------------------编程问答-------------------- 每次执行定时器,time初始为0. --------------------编程问答-------------------- 补充说明……
本身计算就有问题,hour值为time/3600 没错,但是Minute值为time/60,这明显是不对的。
加减乘除不用再教你了吧,自己好好看看吧。
--------------------编程问答--------------------
引用楼主 huwei247789886 的回复:
private void timer1_Tick(object sender, EventArgs e)
  {
  #region 时间设置
  int time = 0;
  int Hour = time / 3600;
  int Minute = time / 60;
  time++;

  toolLbl_time.Text ="在线时间:{0}小时{1}分钟", H……


每次time都先赋值0,当然不行了。

把time放到timer1_Tick()外,用全局变量

    public static int time = 0;

    private void timer1_Tick(object sender, EventArgs e)
    {
       time = time +1;
    }
--------------------编程问答--------------------
  int time = 0;
  int Hour = time / 3600;
  int Minute = time / 60;


  time = 0;
  Hour = 0;
  Minute = 0;
--------------------编程问答--------------------
引用 12 楼 xrongzhen 的回复:
引用楼主 huwei247789886 的回复:
private void timer1_Tick(object sender, EventArgs e)
{
#region 时间设置
int time = 0;
int Hour = time / 3600;
int Minute = time / 60;
time++;

toolLbl_time.Text ="在线时间:{0……


也是这种想法的!! --------------------编程问答-------------------- 应该使用stopwatch ,timer计时是不精确的! --------------------编程问答--------------------
引用 4 楼 snowwolf_119 的回复:
问题出在int time = 0,不应该定义在timer中,这样每执行一次time都会被清0。
解决建议,可以将time变量提到timer外面

对 --------------------编程问答--------------------
引用楼主 huwei247789886 的回复:
private void timer1_Tick(object sender, EventArgs e)
  {
  #region 时间设置
  int time = 0;  int Hour = time / 3600;
  int Minute = time / 60;
  time++;

  toolLbl_time.Text ="在线时间:{0}小时{1}分钟", H……

把time定义放到外面 就是定义成全局变量
还有就是你处理一下显示当>1小时时显示  :{0}小时{1}分钟 小于一小时时只显示 分钟和秒 这样效果好点 --------------------编程问答-------------------- 谢谢各位哈  理解了! --------------------编程问答-------------------- int time = 0;
int Minute = time / 60;
以上两句很有问题:
第一句我不说了,
第二句:
if(time/60>=60)
{
    //m没可能超过60吧
}
else
{

}


--------------------编程问答-------------------- time控件计算不精确,更多的是用来表示桢

而且每个单位时间间隔都要计算一次,500个用户每个单位时间就要算500次,占资源太多

直接用结束时间-开始时间好了 --------------------编程问答-------------------- 你的time表示什么? --------------------编程问答-------------------- 全局变量
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,