C# 按钮需要两次单独的单击才能完成操作

C# 按钮需要两次单独的单击才能完成操作,c#,winforms,C#,Winforms,我试图做一个按钮,将设置另一个按钮的文本时,点击。但是,当我这样做时,需要再次单击来执行第二个操作,即设置按钮文本 private void button2_Click(object sender, EventArgs e) { // Button has been clicked. if(a == 1){ // The button has been clicked only once button

我试图做一个按钮,将设置另一个按钮的文本时,点击。但是,当我这样做时,需要再次单击来执行第二个操作,即设置按钮文本

    private void button2_Click(object sender, EventArgs e)
    {
        // Button has been clicked.
        if(a == 1){
            // The button has been clicked only once
            button2.Text = "Repeat: Off";
            button6.Text = "Shuffle: Off";
            loop = false;
            shuffle = false;
            a = 2;
        } else if(a == 2) {
            // The button has been clicked only twice :c
            button2.Text = "Repeat: On";
            button6.Text = "Shuffle: Off";
            loop = true;
            shuffle = false;
            a = 1;
        }
    }
我不知道这是怎么发生的

a==1
时,您的第一个操作(
if
条件)为true。 当
a==2
时,您的第二个操作(
else if
)为true

您正在第一次操作中设置
a=2
if
条件)的值


因此,当您第一次单击按钮时,它将a的值设置为2,并且仅执行第一个操作(如果条件)。当您再次单击同一按钮时,它将执行第二个操作(否则如果),因为第一次单击将a的值设置为2。

您正在使用变量
a
代理按钮的当前状态,这通常不是一个好主意。您应该只检查按钮的状态(或它修改的任何属性)。看看这个实现,注意我删除了Shuffle元素,因为它是常量:

private void button2_Click(object sender, EventArgs e)
{
    loop = !loop;
    if (loop)
    {
        button2.Text = "Repeat: On";
    }
    else
    {
        button2.Text = "Repeat: Off";
    }
}

在观察变量值的变化时,您是否设置了断点并逐步执行了方法?是否初始化了一个变量值=0?@VimalanJayaGanesh:我认为在这里,OP不需要双击来执行他们的操作。你需要以合适的方式初始化Flaf(a)和Buton的TRXT。由于您没有这样做,第一次单击只会同步。在那之后,所有进一步的工作都很好,对吗?只需更改a的初始值!我们不知道a的初始值。可能是0???@TaW,它不可能是0,否则它永远不会做任何事情。(这是一个else if,而不是else)…嗯,没错:-)-奥托,问题往往是国旗的初始状态和其他事物(文本)的状态不匹配。。