从标签和属性.系统.默认添加小时数
本文关键字:添加 小时 默认 系统 标签 属性 | 更新日期: 2023-09-27 17:56:33
我已经疯狂了一个计数器,这是一个简单的计数器,从 00:00:00 开始,每秒递增一次我将为此提供我的代码
在表单加载事件中,我已经写了这个
private DateTime startTime;
private void Form7_Load(object sender, EventArgs e)
{
startTime = DateTime.Now;
timer1.Start();
}
private void timer1_Tick(object sender, System.EventArgs e)
{
counter_label.Text = (DateTime.Now - startTime)
.ToString(@"hh':mm':ss");
}
计时器设置为 1000 表示 1 秒,所以我的计时器工作正常但是现在我想将标签.文本保存到位于属性中的wform设置.settings.default所以我通过以下方式保存了文本
private void Form7_FormClosing(object sender, FormClosingEventArgs e)
{
DateTime st;
DateTime end;
st = Convert.ToDateTime(Properties.Settings.Default.datetime);
end = Convert.ToDateTime(counter_label.Text);
Properties.Settings.Default.datetime = counter_label.Text;
total_label.Text = (st + end ).ToString(@"hh':mm':ss");// this is not happening
Properties.Settings.Default.datetime = total_label.Text;
Properties.Settings.Default.Save();
}
错误是操作数 + 无法应用于 System.datetime 和 System.datetime我的意图是。当我将文本保存到系统属性时。 在表单关闭事件中,必须保存新的更新结果。系统属性中的旧文本和counter_label中的新文本。怎么能做到呢?
不能添加两个日期时间对象。我相信您的counter_label
具有TimeSpan
值,因为它的格式是00:00:00
,您可以将其解析为TimeSpan
然后将其添加到您的st
DateTime类型对象中。
TimeSpan ts = TimeSpan.Parse(counter_label.Text);
total_label.Text = st.Add(ts).ToString(@"hh':mm':ss");
不要使用string
类型的设置来存储对象TimeSpan
(正如 Habib 已经说过的那样,减去或添加DateTime
对象会产生TimeSpan
)。您应该Settings.settings
文件中创建类型为 System.TimeSpan
的设置(例如,使用名称 TotalTime)。
储蓄:
Properties.Settings.Default.TotalTime = (DateTime.Now - startTime);
Properties.Settings.Default.Save();
加载(这是技巧 - 您正在减去当前时间剩余的时间。因此,如果您还剩两分钟,则开始时间将设置为在开始应用程序之前两分钟,就像您从未关闭它一样):
startTime = DateTime.Now.Subtract(Properties.Settings.Default.TotalTime);
因此,您不需要解析任何字符串。使用 DateTime 和 TimeSpan,让 .NET 为你完成所有持久化工作。
更新(所有代码):
DateTime startTime;
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = (DateTime.Now - startTime).ToString(@"hh':mm':ss");
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
timer1.Stop();
Properties.Settings.Default.TotalTime = (DateTime.Now - startTime);
Properties.Settings.Default.Save();
}
private void Form1_Load(object sender, EventArgs e)
{
startTime = DateTime.Now.Subtract(Properties.Settings.Default.TotalTime);
timer1.Start();
}
如果是首次运行应用程序,则Properties.Settings.Default.TotalTime
将返回默认值 TimeSpan
(即零时间跨度)。因此,从当前时间中减去它将返回与当前时间相同的值。
运算符 + 定义如下:
public static DateTime operator +(
DateTime d,
TimeSpan t
)
将指定的时间间隔添加到指定的日期和时间,从而生成新的日期和时间。*您只能添加(+)时间跨度到日期时间!!!*修复代码:
TimeSpan sp = TimeSpan.Parse(counter_label.Text);
total_label.Text = (st+sp).ToString(@"hh':mm':ss");
两个DateTime
之间的区别不是另一个DateTime
,而是一个TimeSpan
。所以你要坚持的不是一瞬间,而是总运行时间,应该是TimeSpan
。