C# WinForm表单启动器(Application.OpenForms)

C# WinForm表单启动器(Application.OpenForms),c#,winforms,C#,Winforms,我使用以下代码调用我的winforms: try { if (Application.OpenForms.OfType<frmBackupManager>().Count() > 0) { if (Application.OpenForms["frmBackupManager"].WindowState == FormWindowState.Minimized)

我使用以下代码调用我的winforms:

try
        {
            if (Application.OpenForms.OfType<frmBackupManager>().Count() > 0)
            {
                if (Application.OpenForms["frmBackupManager"].WindowState == FormWindowState.Minimized)
                {
                    Application.OpenForms["frmBackupManager"].WindowState = FormWindowState.Normal;
                    Application.OpenForms["frmBackupManager"].BringToFront();
                }
                else
                {
                    Application.OpenForms["frmBackupManager"].BringToFront();
                }
            }
            else
            {
                // Show Backup Manager                    
                frmBackupManager myBackupManager;
                myBackupManager = new frmBackupManager();
                myBackupManager.StartPosition = FormStartPosition.Manual;
                myBackupManager.Location = new Point(this.Location.X + this.Width / 2 - myBackupManager.Width / 2, this.Location.Y + this.Height / 2 - myBackupManager.Height / 2);
                myBackupManager.Show();
            }
        }
        catch (Exception ex)
        {
            MessageBoxEx.Show("Unable to perform requested action: " + ex.Message.ToString(), "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
试试看
{
if(Application.OpenForms.OfType().Count()>0)
{
if(Application.OpenForms[“frmBackupManager”].WindowState==FormWindowState.Minimized)
{
Application.OpenForms[“frmBackupManager”].WindowState=FormWindowState.Normal;
Application.OpenForms[“frmBackupManager”].BringToFront();
}
其他的
{
Application.OpenForms[“frmBackupManager”].BringToFront();
}
}
其他的
{
//显示备份管理器
frmBackupManager我的backupmanager;
myBackupManager=新的frmBackupManager();
myBackupManager.StartPosition=FormStartPosition.Manual;
myBackupManager.Location=新点(this.Location.X+this.Width/2-myBackupManager.Width/2,this.Location.Y+this.Height/2-myBackupManager.Height/2);
myBackupManager.Show();
}
}
捕获(例外情况除外)
{
MessageBoxEx.Show(“无法执行请求的操作:+ex.Message.ToString(),“错误消息”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
我想从方法或类调用此函数,但我一直收到一个错误,找不到类型或命名空间名称“FormName”(是否缺少using指令或程序集引用?) 在每个使用FormName的地方。

private void btnBackupManager_Click(object sender, EventArgs e)
    {
        // Launch Backup Manager Form
        LaunchForm("frmBackupManager", "MyBackupManager");
    }

    private void LaunchForm(string FormName, string MyForm)
    {
        try
        {
            if (Application.OpenForms.OfType<FormName>().Count() > 0)
            {
                if (Application.OpenForms[FormName].WindowState == FormWindowState.Minimized)
                {
                    Application.OpenForms[FormName].WindowState = FormWindowState.Normal;
                    Application.OpenForms[FormName].BringToFront();
                }
                else
                {
                    Application.OpenForms[FormName].BringToFront();
                }
            }
            else
            {
                // Show Backup Manager                    
                FormName myFormName;
                myFormName = new FormName();
                myFormName.StartPosition = FormStartPosition.Manual;
                myFormName.Location = new Point(this.Location.X + this.Width / 2 - myFormName.Width / 2, this.Location.Y + this.Height / 2 - myFormName.Height / 2);
                myFormName.Show();
            }
        }
        catch (Exception ex)
        {
            MessageBoxEx.Show("Unable to perform requested action: " + ex.Message.ToString(), "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }
private void btnBackupManager\u单击(对象发送者,事件参数e)
{
//启动备份管理器窗体
启动表单(“frmBackupManager”、“MyBackupManager”);
}
私有void启动表单(字符串FormName,字符串MyForm)
{
尝试
{
if(Application.OpenForms.OfType().Count()>0)
{
if(Application.OpenForms[FormName].WindowsState==FormWindowsState.Minimized)
{
Application.OpenForms[FormName].WindowsState=FormWindowsState.Normal;
Application.OpenForms[FormName].BringToFront();
}
其他的
{
Application.OpenForms[FormName].BringToFront();
}
}
其他的
{
//显示备份管理器
FormName我的FormName;
myFormName=新FormName();
myFormName.StartPosition=FormStartPosition.Manual;
myFormName.Location=新点(this.Location.X+this.Width/2-myFormName.Width/2,this.Location.Y+this.Height/2-myFormName.Height/2);
myFormName.Show();
}
}
捕获(例外情况除外)
{
MessageBoxEx.Show(“无法执行请求的操作:+ex.Message.ToString(),“错误消息”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}

您的问题是使用变量作为类型。例如,这一行:

if (Application.OpenForms.OfType<FormName>().Count() > 0)
您可以使用反射解决此问题:

if(Application.OpenForms.Where(form => form.GetType().Name == FormName).Count() > 0)

您的问题是使用变量作为类型。例如,这一行:

if (Application.OpenForms.OfType<FormName>().Count() > 0)
您可以使用反射解决此问题:

if(Application.OpenForms.Where(form => form.GetType().Name == FormName).Count() > 0)
  • 您的泛型函数可以具有Form类型的输入参数(派生所有Win表单的类)
  • 例如:

    私人作废启动表(formToOpen表)

  • 这样,您就可以在需要时使用对象引用

  • 并仅访问名称(Form类的name属性;Ex:-formToOpen.name)(如果适用和相关)
  • 这使实现保持强类型
  • 因此,所需功能的实现可以如下所示:

    private void LaunchForm(Form formToOpen)
    {
        try
        {
            if (formToOpen != null)
            {
                if (Application.OpenForms.OfType<Form>().Count() > 0)
                {
                    if (Application.OpenForms[formToOpen.Name].WindowState == FormWindowState.Minimized)
                    {
                        Application.OpenForms[formToOpen.Name].WindowState = FormWindowState.Normal;
                        Application.OpenForms[formToOpen.Name].BringToFront();
                    }
                    else
                    {
                        Application.OpenForms[formToOpen.Name].BringToFront();
                    }
                }
                else
                {
                    Form formToLaunch;
                    formToLaunch = formToOpen;
                    formToLaunch.StartPosition = FormStartPosition.Manual;
                    formToLaunch.Location = new Point(this.Location.X + this.Width / 2 - formToLaunch.Width / 2, this.Location.Y + this.Height / 2 - formToLaunch.Height / 2);
                    formToLaunch.Show();
                }
            }
        }
        catch (Exception ex)
        {
            MessageBoxEx.Show("Unable to perform requested action: " + ex.Message.ToString(), "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    
    private void启动表单(表单formToOpen)
    {
    尝试
    {
    如果(formToOpen!=null)
    {
    if(Application.OpenForms.OfType().Count()>0)
    {
    if(Application.OpenForms[formToOpen.Name].WindowState==FormWindowState.Minimized)
    {
    Application.OpenForms[formToOpen.Name].WindowState=FormWindowState.Normal;
    Application.OpenForms[formToOpen.Name].BringToFront();
    }
    其他的
    {
    Application.OpenForms[formToOpen.Name].BringToFront();
    }
    }
    其他的
    {
    表单发布;
    formToLaunch=formToOpen;
    formToLaunch.StartPosition=FormStartPosition.Manual;
    formToLaunch.Location=新点(this.Location.X+this.Width/2-formToLaunch.Width/2,this.Location.Y+this.Height/2-formToLaunch.Height/2);
    formToLaunch.Show();
    }
    }
    }
    捕获(例外情况除外)
    {
    MessageBoxEx.Show(“无法执行请求的操作:+ex.Message.ToString(),“错误消息”,MessageBoxButtons.OK,MessageBoxIcon.Error);
    }
    }
    
    }

      • 您的泛型函数可以具有Form类型的输入参数(派生所有Win表单的类)
      • 例如:

        私人作废启动表(formToOpen表)

      • 这样,您就可以在需要时使用对象引用

      • 并仅访问名称(Form类的name属性;Ex:-formToOpen.name)(如果适用和相关)
      • 这使实现保持强类型
      • 因此,所需功能的实现可以如下所示:

        private void LaunchForm(Form formToOpen)
        {
            try
            {
                if (formToOpen != null)
                {
                    if (Application.OpenForms.OfType<Form>().Count() > 0)
                    {
                        if (Application.OpenForms[formToOpen.Name].WindowState == FormWindowState.Minimized)
                        {
                            Application.OpenForms[formToOpen.Name].WindowState = FormWindowState.Normal;
                            Application.OpenForms[formToOpen.Name].BringToFront();
                        }
                        else
                        {
                            Application.OpenForms[formToOpen.Name].BringToFront();
                        }
                    }
                    else
                    {
                        Form formToLaunch;
                        formToLaunch = formToOpen;
                        formToLaunch.StartPosition = FormStartPosition.Manual;
                        formToLaunch.Location = new Point(this.Location.X + this.Width / 2 - formToLaunch.Width / 2, this.Location.Y + this.Height / 2 - formToLaunch.Height / 2);
                        formToLaunch.Show();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBoxEx.Show("Unable to perform requested action: " + ex.Message.ToString(), "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        
        private void启动表单(表单formToOpen)
        {
        尝试
        {
        如果(formToOpen!=null)
        {
        if(Application.OpenForms.OfType().Count()>0)
        {
        if(Application.OpenForms[formToOpen.Name].WindowsState=
        
        if (Application.OpenForms.OfType<FormName>().Count() > 0) 
        {
            if (Application.OpenForms[FormName].WindowState == FormWindowState.Minimized) 
            { 
                Application.OpenForms[FormName].WindowState = FormWindowState.Normal; 
                Application.OpenForms[FormName].BringToFront(); 
            } 
            else 
            { 
                Application.OpenForms[FormName].BringToFront(); 
            } 
        }
        
        if (Application.OpenForms.OfType<FormName>().Count() > 0) 
        {
            if (Application.OpenForms[childForm].WindowState == FormWindowState.Minimized) 
            { 
                Application.OpenForms[childForm].WindowState = FormWindowState.Normal; 
                Application.OpenForms[childForm].BringToFront(); 
            } 
            else 
            { 
                Application.OpenForms[childForm].BringToFront(); 
            } 
        }
        
        private void LaunchForm(string childForm, string MyForm)    
        {
            ...
        }