2017-04-09 34 views
0

第二卡工作时,我的形式按钮按预期工作之间移动,但是当IM关闭我的自定义弹出只有几秒钟的任何按钮点击就会触发它按钮只对自定义弹出C#

这是代码即时通讯使用加载我的自定义弹出

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应用程序

+0

您从哪个事件处理函数调用_closePopup_? – Steve

+0

'在我的自定义弹出窗口中点击' – styx

+0

因此在您的自定义弹出窗口中,您正在关闭弹出窗口?那么为什么你需要在所有申请表上循环?它不只是_this.Close(); _? – Steve

回答

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是基类方法。

+0

将代码更改为更通用。 – Steve