初始化在 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);
}
}
我正在尝试创建包含 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);
}
}