我正在尝试做一个Crono.我试图使用以下代码创建一个双功能按钮(开始/停止):
private void buttonStartStop_Click(object sender, EventArgs e)
{
if (buttonStartStop.Text=="Start")
{
timerCrono.Enabled = true;
buttonStartStop.Text = "Stop";
buttonResetLap.Text = "Lap";
}
if (buttonStartStop.Text == "Stop")
{
timerCrono.Enabled = false;
textBoxLaps.Text += "(Lap " + laps + ")" + " " + min + ":" + sec + "," + decsec + "\r\n";
laps++;
buttonStartStop.Text = "Start";
buttonResetLap.Text = "Reset";
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我点击它时它似乎做了2个功能.
那么我能做些什么才能在一个按钮中完成2个独立的功能呢?
当文本为"开始"时,执行第一个if块.
第一个if块将文本设置为"Stop".
然后你到达第二个if块.文字是"停止"吗?确实是.你只需将它设置为那个.所以第二个if块执行.
使用else,如下所示.当你这样做时,它只会if在第一个if条件为false时尝试第二个.所以它只做一个或另一个,或者两个都没有,但从来没有.
private void buttonStartStop_Click(object sender, EventArgs e)
{
if (buttonStartStop.Text=="Start")
{
timerCrono.Enabled = true;
buttonStartStop.Text = "Stop";
buttonResetLap.Text = "Lap";
}
else if (buttonStartStop.Text == "Stop")
{
timerCrono.Enabled = false;
textBoxLaps.Text += "(Lap " + laps + ")" + " " + min + ":" + sec + "," + decsec + "\r\n";
laps++;
buttonStartStop.Text = "Start";
buttonResetLap.Text = "Reset";
}
}
Run Code Online (Sandbox Code Playgroud)
TheLethalCoder指出你也可以使用一个switch声明(并且有一个这样的名字,我建议你认真对待他):
switch (buttonStartStop.Text) {
case "Start":
timerCrono.Enabled = true;
buttonStartStop.Text = "Stop";
buttonResetLap.Text = "Lap";
break;
case "Stop":
timerCrono.Enabled = false;
textBoxLaps.Text += "(Lap " + laps + ")" + " " + min + ":" + sec + "," + decsec + "\r\n";
laps++;
buttonStartStop.Text = "Start";
buttonResetLap.Text = "Reset";
break;
}
Run Code Online (Sandbox Code Playgroud)
处理这些事情的方法是在函数开始处设置断点,运行程序,并使用F10键逐步执行每一行.在每一行,仔细检查代码与之交互的所有变量.你会看到buttonStartStop.Text改变"Stop",然后你会看到第二个if语句评估buttonStartStop.Text,你会得到启发.