按钮仅适用于第二次单击自定义弹出窗口c#

时间:2017-04-09 07:45:11

标签: c# winforms onclick popup

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

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

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();
    }           
}

这是我用来关闭自定义弹出窗口的代码

dataframe

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

1 个答案:

答案 0 :(得分:1)

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

尽管如此,您可以使用Tag属性中的主窗体保存实例来调用Activate方法并将焦点恢复为主窗体。

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();
}

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