-1

我制作了一个计数器,它是一个简单的计数器,从 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 秒,所以我的计时器工作正常,但现在我想将 label.text 保存到位于 properties.settings.default 中的 winform 设置中,所以我将文本保存到

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 我的意图是。当我将文本保存到系统属性时。在表单关闭事件中,必须保存新的更新结果。system.properties 中的旧文本和 counter_label 中的新文本。如何做呢?

4

4 回答 4

2

您不能添加两个日期时间对象。我相信你counter_label有一个TimeSpan值,因为它的格式是00:00:00,你可以解析它TimeSpan然后将它添加到你的stDateTime 类型对象中。

TimeSpan ts = TimeSpan.Parse(counter_label.Text);
total_label.Text = st.Add(ts).ToString(@"hh\:mm\:ss");
于 2013-01-29T12:42:53.760 回答
1

运算符 + 定义如下:

public static DateTime operator +(
    DateTime d,
    TimeSpan t
)

将指定的时间间隔添加到指定的日期和时间,产生新的日期和时间。 *您只能将 (+) timeSpand 添加到 dateTime !!!!* 修复代码:

TimeSpan sp = TimeSpan.Parse(counter_label.Text);
total_label.Text = (st+sp).ToString(@"hh\:mm\:ss");
于 2013-01-29T12:42:33.533 回答
1

不要使用string类型设置来存储TimeSpan对象(正如 Habib 已经说过的,DateTime对象的减法或加法会产生TimeSpan)。您应该创建文件类型System.TimeSpan的设置Settings.settings(例如,名称为 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(即零时间跨度)。因此,从当前时间中减去它将返回与当前时间相同的值。

于 2013-01-29T13:55:19.487 回答
0

两者的区别DateTime不是另一个DateTime,而是一个TimeSpan。所以你要坚持的不是片刻时间,而是总的运行时间,应该是TimeSpan.

于 2013-01-29T12:42:39.843 回答