using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
namespace 計算機使用時間
{
public partial class time : Form
{
int shijian = 0;
public time()
{
InitializeComponent();
}
public String gettime(int t)
{
int hh, mm, ss, ms, num;
String h, m, s, mms;
num = t / 100;//獲取總秒數
ms = t % 100;
ss = num % 60;
mm = num / 60 % 60;
hh = num / 60 / 60 % 60;
if (ms < 10) mms = "0" + ms.ToString();
else mms = ms.ToString();
if (ss < 10) s = "0" + ss.ToString();
else s = ss.ToString();
if (mm < 10) m = "0" + mm.ToString();
else m = mm.ToString();
if (hh < 10) h = "0" + hh.ToString();
else h = hh.ToString();
string times = h + ":" + m + ":" + s + ":" + mms;
return times;
}
private void time_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
label1.Text = "00:00:00:00";
}
private void button1_Click(object sender, EventArgs e)
{
if (timer1.Enabled)
{
timer1.Stop();//停止timer控制元件
button1.Text = "開始上網";
button2.Enabled = true;
}
else
{
timer1.Start();//開始timer控制元件
button1.Text = "上網結束";
button2.Enabled = false;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
shijian++;
label1.Text = gettime(shijian);
}
private void label1_Click(object sender, EventArgs e)
{
}
}
}
我使用了一個timer控制元件來計時,界面是一個label控制元件兩個按鈕,label控制元件初始值為00:00:00:00,然后在點擊按鈕一的時候開始計時,label控制元件的值開始變化,點擊按鈕1之后按鈕從開始計時變成停止計時,按鈕2是重置清零。我想實作的效果是當label控制元件里面的時間每過一個小時彈窗提示一次,彈窗的同時label控制元件不再繼續計時,我嘗試使用兩個timer控制元件時彈窗時計時器不停止,一個timer的話彈窗跳出頻率又和計時器頻率一樣。最好有實體或教程,越仔細越好,本人菜鳥,剛剛接觸C#。
uj5u.com熱心網友回復:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DateTime _dtStart;
bool _isShow = false;
private void button1_Click(object sender, EventArgs e)
{
if (timer1.Enabled)
{
timer1.Stop();//停止timer控制元件
button1.Text = "開始上網";
button2.Enabled = true;
}
else
{
_isShow = true;
_dtStart = DateTime.Now;
timer1.Start();//開始timer控制元件
button1.Text = "上網結束";
button2.Enabled = false;
}
}
private void button2_Click(object sender, EventArgs e)
{
label1.Text = "00:00:00:00";
}
private void timer1_Tick(object sender, EventArgs e)
{
if (_isShow)
{
TimeSpan ts = DateTime.Now - _dtStart;
label1.Text = string.Format("{0}:{1}:{2}:{3}", padLeft0(ts.Hours), padLeft0(ts.Minutes), padLeft0(ts.Seconds), padLeft0(ts.Milliseconds / 10));
if (ts.TotalHours > 1)
{
_isShow = false;
MessageBox.Show("時間已到");
}
}
}
string padLeft0(int v)
{
return v.ToString().PadLeft(2, '0');
}
}
uj5u.com熱心網友回復:
大佬,原諒我沒有把問題描述清楚,別打我我呢,做的是一個簡易計時器,按鈕一點擊過后開始計時,中途不管是自動彈窗或者是點擊了停止計時,label除了停止沒有任何變化,點擊彈窗上的按鈕或者再次點擊開始計時還是接著原來的時間繼續,只有點擊button2label才會重置清零
uj5u.com熱心網友回復:
現在label控制元件已經達到我想要的效果了,但是新的問題是label混亂了,現在原本記錄小時的現在變成記錄分鐘了,原本記錄分鐘的現在變成記錄秒數了,而且計時開始是正常進行,后期越來越快,一下子就顯示已經到了一個小時了,在點擊彈窗按鈕使彈窗消失后label確實沒有變化,但是在再次點擊開始計時按鈕(button1)后馬上又再次彈窗了
uj5u.com熱心網友回復:
DateTime _dtStart;
bool _isShow = false;
TimeSpan _tsNow;
private void button1_Click(object sender, EventArgs e)
{
if (timer1.Enabled)
{
timer1.Stop(); //停止timer控制元件
_tsNow += DateTime.Now - _dtStart;
button1.Text = "開始上網";
button2.Enabled = true;
}
else
{
_isShow = true;
_dtStart = DateTime.Now;
timer1.Start();//開始timer控制元件
button1.Text = "上網結束";
button2.Enabled = false;
}
}
private void button2_Click(object sender, EventArgs e)
{
label1.Text = "00:00:00:00";
_tsNow = new TimeSpan(0);
}
private void timer1_Tick(object sender, EventArgs e)
{
if (_isShow)
{
TimeSpan ts = DateTime.Now - _dtStart + _tsNow;
label1.Text = string.Format("{0}:{1}:{2}:{3}", padLeft0(ts.Hours), padLeft0(ts.Minutes), padLeft0(ts.Seconds), padLeft0(ts.Milliseconds / 10));
if (ts.TotalHours > 1)
{
_isShow = false;
MessageBox.Show("時間已到");
}
}
}
string padLeft0(int v)
{
return v.ToString().PadLeft(2, '0');
}
uj5u.com熱心網友回復:



新的問題,三張圖片分別是第一次自動彈窗的截圖和點擊彈窗按鈕使彈窗消失后再次點擊計時按鈕(button1)后自動彈窗截圖以及第二次點擊彈窗按鈕使彈窗消失后第三次點擊計時按鈕(button1)后自動彈窗截圖,第一次是準確彈窗,第二次和第三次開始混亂了
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/52373.html
標籤:C#
