初始化在 if 条件下工作的组件?

initialize component working in if condition?

我正在尝试创建包含 2 个项目的新解决方案。解决方案启动项目是 "Main Component" 项目,另一个项目是 "Login Function" 项目。

基本上 "Main Component" 中的 MainForm 在 "Login Function" 中调用 LoginForm 当解决方案启动时。我在 MainForm Constructor 中编写了一个条件来调用 LoginForm 并完美地工作,但是当从 LoginForm 转义时,我收到如下 Program.cs 中的错误。因为 initializeComponent() 部分在 if 条件为真时工作。我不知道是否有其他方法可以做到这一点。

我知道解决方案有效,但我该如何解决这个 Dispose 问题?

Program.cs;

namespace Main_Component
{
    static class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            using (var mainForm = new MainForm())
            {
                Application.Run(mainForm);
            }
        }
    }
}

Cannot access a disposed object.\r\nObject name: 'MainForm'.

public MainForm()
    {
        try
        {
            var _lForm=new LoginForm();
            _lForm.ShowDialog();
            if (LoginForm._loginSuccess)
            {
                InitializeComponent();
            }
            else
            {
                this.Close();
            }
        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

您的主要问题是您没有正确处理 IDisposable 组件。 你需要有一个更好的 as 结构,这样你就不会手动更新你的组件。 但是您可以使用以下 using 用法来修复现有问题:

public MainForm()
    {
        try
        {
            using(var _lForm=new LoginForm())
            {
                _lForm.ShowDialog();
                if (LoginForm._loginSuccess)
                {
                    InitializeComponent();
                }
                else
                {
                    this.Close();
                }
            }
        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }