如何在按钮点击之间保持布尔状态?

时间:2016-10-22 23:39:33

标签: c# if-statement boolean

我正在尝试编写一个可用于启动另一个程序的程序。我有一个按钮,当它被点击时,我想启动一个程序,并记录该程序已经启动。当我开始一个新程序时,我想首先检查一下我是否还没有启动该程序 - 如果有,请先关闭现有实例(因此最多只能存在一个程序实例) )。

我已经编写了以下代码:

private void button1_Click(object sender, EventArgs e)
{
    bool status = false;
    if (status != true)
    {
        status = true;
        System.Diagnostics.Process.Start("C:\\Users\\David\\Desktop\\Test\\Test.exe");
    }
}

现在我的问题是,如果我点击按钮,变量将设置为false,如第一行所示。我怎么能正确地做到这一点?另外,如果status设置为true,我如何返回0?

2 个答案:

答案 0 :(得分:1)

如果要在调用中保留其值,请将bool变量的声明移到方法之外:

bool status = false;
Process myProcess;
private void button1_Click(object sender, EventArgs e) {
    if (status != true) {
        myProcess = new Process()
        myProcess.EnableRaisingEvents = true;
        status = true;
        // Start a process to print a file and raise an event when done.
        myProcess.StartInfo.FileName = "C:\\Users\\David\\Desktop\\Test\\Test.exe";
        myProcess.Exited += new EventHandler(Process_Exited);
        myProcess.Start();
    }
}

private void Process_Exited(object sender, System.EventArgs e) {
    status = false;
}

现在诊断消息只会在您的对象的每个生命周期出现一次。退出流程后,status会重置为false,让您再次点击该按钮。

另请注意,由于按钮在状态设置为true后没有执行任何操作,因此最好禁用它以避免混淆最终用户。

答案 1 :(得分:0)

问题是你在click_button事件中声明变量,因此无法在方法“click_button”之外到达变量

尝试使用类似的东西

bool status = false;
int ChangeStatus()
{
    if(status!=true)
    {
        status = true;
        System.Diagnostics.Process.Start("C:\\Users\\David\\Desktop\\Test\\Test.exe");
        return 0;
    }
  return 1; //if the status is false it will return 1 or the value you want
}

然后在Button_Click事件中添加

 private void button1_Click(object sender, EventArgs e) {
     //I don't know where you will display or save the value (0 or 1) I will assign it in a variable
    var result = ChangeStatus();
 }

希望它可以帮到你