C# 计时器不是从00:00开始的
我有一个游戏,里面有一个计时器。每过两分钟,不同玩家之间的新一轮比赛开始。所以,我有一个文本框,从00:00开始,每秒钟都会改变,直到它等于02:00C# 计时器不是从00:00开始的,c#,time,save,C#,Time,Save,我有一个游戏,里面有一个计时器。每过两分钟,不同玩家之间的新一轮比赛开始。所以,我有一个文本框,从00:00开始,每秒钟都会改变,直到它等于02:00 现在,如果用户关闭表单,我想把游戏的状态保存在一个回合中间。我需要做的是,加载时,文本框从用户上次离开游戏时开始,正常情况下一直持续到02:00 我该怎么做 这就是我现在所拥有的比赛形式 public Tournament() { _timer = new System.Windows.Forms.Timer(); _time
现在,如果用户关闭表单,我想把游戏的状态保存在一个回合中间。我需要做的是,加载时,文本框从用户上次离开游戏时开始,正常情况下一直持续到02:00
我该怎么做 这就是我现在所拥有的比赛形式public Tournament()
{
_timer = new System.Windows.Forms.Timer();
_timer.Interval = 1000;
_timer.Tick += Timer_Tick;
_myDateTime = DateTime.Now;
newDate = new DateTime();
newDate = newDate.AddMinutes(2.00);
_timer.Start();
InitializeComponent();
}
void Timer_Tick(object sender, EventArgs e)
{
var diff = DateTime.Now.Subtract(_myDateTime);
this.textBox1.Text = diff.ToString(@"mm\:ss");
DateTime dt = Convert.ToDateTime(diff.ToString());
if (newDate.Minute == dt.Minute)
{
_timer.Stop();
_myDateTime = DateTime.Now;
displayPointsOrResults();
this.textBox1.Text = diff.ToString(@"mm\:ss");
}
}
在我的LoadGame方法中:where timePassed是我在文本框中写的内容
string[] splitted6 = timePassed.Split(':');
if (splitted6[0] == "00")
{
int remainingTime = 120 - Convert.ToInt32(splitted6[1]);
DateTime time = DateTime.Now.Date;
time = time.AddMinutes(remainingTime);
_myDateTime = time;
}
else
{
int leftTime = Convert.ToInt32(splitted[0].Trim('0') + splitted[1]);
int remainingTime = 120 - leftTime;
DateTime time = DateTime.Now.Date;
time = time.AddMinutes(remainingTime);
_myDateTime = time;
}
使用
TimeSpan
而不是DateTime
保存和加载当前超时:
int _roundDuration = 2 * 60; // 2 minutes
void Timer_Tick(object sender, EventArgs e)
{
TimeSpan diff = DateTime.Now - _myDateTime;
textBox1.Text = diff.ToString(@"mm\:ss");
if (diff.TotalSeconds >= _roundDuration)
{
_timer.Stop();
_myDateTime = DateTime.Now;
displayPointsOrResults();
}
}
加载游戏时(解析textBox1.Text
):
无论何时加载游戏,开始时间都将按照超时前显示的开始时间进行计算。使用
TimeSpan
而不是DateTime
保存和加载当前超时:
int _roundDuration = 2 * 60; // 2 minutes
void Timer_Tick(object sender, EventArgs e)
{
TimeSpan diff = DateTime.Now - _myDateTime;
textBox1.Text = diff.ToString(@"mm\:ss");
if (diff.TotalSeconds >= _roundDuration)
{
_timer.Stop();
_myDateTime = DateTime.Now;
displayPointsOrResults();
}
}
加载游戏时(解析textBox1.Text
):
无论何时加载游戏,开始时间都将按照超时前显示的开始时间进行计算。到目前为止,您的操作过于复杂了!不要将值保存为字符串(例如标签的
文本
)或解析任何“字符串化”值
相反,使用后台计数器(例如,计算秒数),该计数器因显示原因而格式化:
int _seconds = 0;
const int _roundDuration = 120; // 2 minutes
...
void Timer_Tick(object sender, EventArgs e)
{
if (_seconds++ >= _roundDuration)
{
_seconds = 0;
displayPointsOrResults();
}
textBox1.Text = (_seconds / 60).ToString("D2") + ":" + (_seconds % 60).ToString("D2");
}
你把这件事搞得太复杂了!不要将值保存为字符串(例如标签的
文本
)或解析任何“字符串化”值
相反,使用后台计数器(例如,计算秒数),该计数器因显示原因而格式化:
int _seconds = 0;
const int _roundDuration = 120; // 2 minutes
...
void Timer_Tick(object sender, EventArgs e)
{
if (_seconds++ >= _roundDuration)
{
_seconds = 0;
displayPointsOrResults();
}
textBox1.Text = (_seconds / 60).ToString("D2") + ":" + (_seconds % 60).ToString("D2");
}
我用过这个谢谢!但是当我将字符串解析为TimeSpan时,例如,如果我有00:33。。从时间跨度来看,现在是33:00。。不知道为什么@学生程序员oops,你需要提供解析格式,等一下,我会更新答案我用过这个谢谢!但是当我将字符串解析为TimeSpan时,例如,如果我有00:33。。从时间跨度来看,现在是33:00。。不知道为什么@学生程序员oops,你们需要提供解析的格式,稍等,我会更新答案