【发布时间】:2020-06-07 12:48:54
【问题描述】:
我遇到了一个小问题,它是一个简单的秒表,但我想在每次程序关闭或单击停止时保存最后日期,以计算每次单击开始时的时间,直到我停止制造时间之类的东西。
举个例子:如果我点击今天开始5秒,然后我关闭程序,我想节省5秒。
然后当我重新打开程序时,它从零开始,但总和为 5 秒。
- 第二次 = 第一次 + 第二次
- 第二次 = 05+000 ..
如果我点击开始 8 秒,它会变成:
- 第二次 = 8 + 5 = 13
如果我关闭程序并重新打开它并单击开始 7 秒
- 秒时间 = 7 + 13 = 20 秒
但我一直将其转换为 ("HH:mm: ss")
原来是这样的
00:00:00 converts to 2/23/2020 12:00:00 AM.
我希望它转换为 00:00:00 没有任何日期(月、年 ...)
因为当我求和时,它给了我错误的数字。
System.Timers.Timer t;
int D, H, m, s;
CultureInfo enUS = new CultureInfo("en-US");
DateTime Drawing;
DateTime Rent;
long Machine_time;
public Form1()
{
InitializeComponent();
Rent = Properties.Settings.Default.Drawing_Time;
}
private void Start_Click(object sender, EventArgs e)
{
t.Start();
}
private void Stop_Click(object sender, EventArgs e)
{
t.Stop();
try
{
// Drawing = DateTime.ParseExact(textBox1.Text, @"HH:mm:ss", CultureInfo.InvariantCulture);
Drawing = DateTime.Parse(textBox1.Text);
// Drawing = DateTime.Now.ToString( @"HH:mm:ss");
Console.WriteLine("{0} converts to {1}.", textBox1.Text, Drawing.ToString());
}
catch (FormatException)
{
Console.WriteLine("{0} is not in the correct format.", textBox1.Text);
}
Properties.Settings.Default.Drawing_Time = Drawing;
long elapsedTicks = Drawing.Ticks ;
Machine_time = elapsedTicks + Machine_time;
TimeSpan elapsedSpan = new TimeSpan(Machine_time);
MessageBox.Show(Drawing.ToString());
string message = elapsedSpan.ToString();
MessageBox.Show(message);
saveSettings();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Properties.Settings.Default.Machine_Time = Machine_Time ;
saveSettings();
t.Stop();
Application.DoEvents();
}
public void saveSettings()
{
try
{
Properties.Settings.Default.Save();
MessageBox.Show("Saved Settings");
}
catch (Exception e)
{
MessageBox.Show("Save Settings: " + e);
}
}
private void Form1_Load(object sender, EventArgs e)
{
t = new System.Timers.Timer();
t.Interval = 1000;
t.Elapsed += onTimeEvent;
}
private void onTimeEvent(object sender, System.Timers.ElapsedEventArgs e)
{
Invoke(new Action(() =>
{
s += 1;
if (s == 60)
{
s = 0;
m += 1;
}
if (m == 60)
{
m = 0;
H += 1;
}
if (H == 24)
{
H = 0;
D += 1;
}
labelResult.Text = string.Format("{0}:{1}:{2}:{3}", D.ToString().PadLeft(2, '0'), H.ToString().PadLeft(2, '0'), m.ToString().PadLeft(2, '0'), s.ToString().PadLeft(2, '0'));
textBox1.Text= string.Format("{0}:{1}:{2}", H.ToString().PadLeft(2, '0'), m.ToString().PadLeft(2, '0'), s.ToString().PadLeft(2, '0'));
}));
}
【问题讨论】:
-
如果您使用 Windows 窗体计时器,您就不必调用
-
是的,你是对的,但我不认为我的问题需要调用。我会重写定时器上的代码,没问题。
-
确实,我从来没有说过这是问题..