如果条件,初始化组件工作?

时间:2017-01-27 15:47:50

标签: c# winforms idisposable

我正在尝试创建包含2个项目的新解决方案。 Solution Startup Project是“Main Component”项目,另一个项目是“Login Function”项目。

“主要组件”中的基本MainForm在“登录功能”中调用LoginForm当解决方案启动时。我在MainForm构造函数中编写了一个条件来调用LoginForm并且工作正常但是当我从LoginForm中逃脱时,我收到了类似于Program.cs中的错误。因为如果condition为true,则initializeComponent()部分工作。我不知道是否有其他方法可以做到这一点。

我知道解决方案正在运行,但如何修复此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);
            }
        }
    }
}
  

无法访问已处置的对象。\ r \ n对象名称:'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);
        }
    }

1 个答案:

答案 0 :(得分:0)

您未正确处理IDisposable组件的主要问题。 您需要拥有更好的结构,因此您不需要手动更新组件。 但您可以使用以下using用法修复exsting conde:

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