我一直试图做一个简单的秒到小时和分钟转换器只是为了练习一些C#。奇怪的是,当我通过599秒标记时,程序减去60秒。所以,540秒等于9分钟; 599秒等于9分59秒,但600秒等于9分钟。我试着用一个按钮来触发命令而不是textchanged,并且按钮做得很好。所以,我认为,问题的根源必须是textchanged事件本身。我将增加三个例子。截图图像是土耳其语,但你会很容易明白。Textchanged事件将无法正确计算
我该如何解决这个问题,以及导致这个问题的原因是什么?这真的让人难以置信。这应该被减去secondLeft值
second = second - minuteLeft;
:
int second, minute, hour, minuteLeft, secondLeft;
private void txtTime_TextChanged(object sender, EventArgs e)
{
CalculateTime();
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
void CalculateTime()
{
if (txtTime.Text != "")
{
second = Convert.ToInt32(txtSure.Text);
secondLeft = second % 60;
second = second - minuteLeft;
minute = second/60;
minuteLeft = minute % 60;
minute = minute - minuteLeft;
hour = minute/60;
lblMsg.Text = hour.ToString() + " hours, " + minuteLeft.ToString() + " minutes " + secondLeft.ToString() + " seconds.";
}
else
{
lblMsg.Text = "";
}
我强烈建议删除这条线'int second,minute,hour,minuteLeft,secondLeft;',然后根据需要在'CalculateTime'中声明变量。 _不需要'second''等字段._ – mjwills
@mjwills嗨,感谢您的反馈。这样做的好处是什么?为了使代码更清洁? –
是的,使它更清洁。而且,编译器会立即向您显示错误。 'var second = Convert.ToInt32(txtSure.Text); var secondLeft = second%60; second = second - minuteLeft; var minute = second/60; var minuteLeft = minute%60; 分钟=分钟 - 分钟左边; var hour = minute/60;''不会编译 - 因为你的bug。这很好 - 编译器(而不是stackoverflow)为你做了很多努力! – mjwills