Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按钮只在第二次点击自定义弹出窗口c时起作用_C#_Winforms_Onclick_Popup - Fatal编程技术网

C# 按钮只在第二次点击自定义弹出窗口c时起作用

C# 按钮只在第二次点击自定义弹出窗口c时起作用,c#,winforms,onclick,popup,C#,Winforms,Onclick,Popup,当我在表单之间移动时,按钮按预期工作,但当我关闭自定义弹出窗口时,只需几秒钟,点击任何按钮就会触发它 这是我用来加载自定义弹出窗口的代码 public void loadPopUp(Form from, Form to) { to.Tag = from; to.Show(from); } public void closePopUp(string formName) { for (int i = Application.OpenForms.Count - 1; i &g

当我在表单之间移动时,按钮按预期工作,但当我关闭自定义弹出窗口时,只需几秒钟,点击任何按钮就会触发它

这是我用来加载自定义弹出窗口的代码

public void loadPopUp(Form from, Form to)
{
    to.Tag = from;
    to.Show(from);
}
public void closePopUp(string formName)
{
    for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
    {
        string name = Application.OpenForms[i].Name; //for debugging only
        if (Application.OpenForms[i].Name == formName)
            Application.OpenForms[i].Close();
    }           
}
这是我用来关闭自定义弹出窗口的代码

public void loadPopUp(Form from, Form to)
{
    to.Tag = from;
    to.Show(from);
}
public void closePopUp(string formName)
{
    for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
    {
        string name = Application.OpenForms[i].Name; //for debugging only
        if (Application.OpenForms[i].Name == formName)
            Application.OpenForms[i].Close();
    }           
}

注意:这不是asp.net应用程序

您的代码中应该有其他内容,或者您可以在主窗口中创建一些内容来更改表单引擎的正常行为。我已经尝试使用上面的代码用LinqPAD构建一个示例应用程序,我的行为与预期一样正常。当我关闭弹出窗口时,焦点将恢复到主窗体

不过,您可以使用Tag属性中的main form saved实例调用Activate方法并将焦点恢复到main form

public void closePopUp(string formName)
{
    // No need to loop over all application OpenForms if you just want
    // to close this popup
    // for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
    // {
    //    string name = Application.OpenForms[i].Name; //for debugging only
    //    if (Application.OpenForms[i].Name == formName)
    //        Application.OpenForms[i].Close();
    //}           

    var mainForm = this.Tag as Form;
    this.Close();
    if(mainForm != null)
        mainForm.Activate();
}

注意,我使用对基窗体类的转换,因此您的代码不依赖于由特定类实例创建的弹出窗口。这是可能的,因为Activate是一个基类方法。

从哪个事件处理程序调用closePopup?单击我的自定义popupSo在自定义popup中关闭弹出窗口?那你为什么要在所有的申请表上循环?不只是这个吗。接近;?是的,这是可以做到的,但这并不能解决我隐藏的问题;也无济于事