【发布时间】:2017-10-06 13:40:25
【问题描述】:
我正在开发一个需要登录的应用程序。
我开发了以下表格: -frmMain - frmLogon
Form main 在引导 Windows 窗体应用程序时启动。在主窗体的“显示”事件中,FrmLogon 窗体显示为对话框。
但是,当自动将 DialogResult 设置为 OK 时,表单不会关闭,程序仅在手动点击“登录”按钮时才有效,这会触发完全相同的功能。
我尝试关闭()表单登录,但这给我留下了 System.ObjectDisposedException。
有什么建议吗?
FrmMain.CS
private void OnFormShown(object sender, EventArgs e)
{
OnClickMenuLogon(sender, e);
}
private void OnClickMenuLogon(object sender, EventArgs e)
{
if (IsLoggedOn())
{
G.LogOff();
User = null;
OnLoggedOff();
}
else
{
FrmLogon logon = new FrmLogon(G, true);
DialogResult result = logon.ShowDialog();
if (result == DialogResult.OK)
{
User = logon.User;
_hostName = User.Name + " @ " + (String.IsNullOrEmpty(logon.HostName) ? Environment.MachineName : logon.HostName);
OnLoggedOn();
}
}
}
FrmLogon.CS
private void OnLogOnSuccess(object sender, LoggedOnEventArgs e)
{
tbStatus.Text = $"[{DateTime.Now.ToString("HH:mm:ss")}]: Successfully logged on.\r\n" + tbStatus.Text;
User = _g.LoggedUser;
HostName = tbHost.Text;
DialogResult = DialogResult.OK;
}
编辑:使用时
this.DialogResult = DialogResult.OK;
this.Close();
出现以下异常: Exception screenshot
【问题讨论】:
-
而不是 DialogResult = DialogResult.OK;试试 this.Close();
-
@StephenWilson 根据Using DialogResult Correctly 不正确
-
@StephenWilson this.Close 将返回给他 DialogResult.Cancel
-
@stuartd 登录是异步的,事件处理程序在 FrmLogon 构造函数中配置。只要登录成功,就会调用该函数。在构造函数中,应用程序尝试自动登录,这会以某种方式导致问题。每当点击表单内的“登录”按钮而不是以编程方式这样做时,相同的登录功能确实可以工作。
-
不要在标题中添加 (SOLVED),撤消上一次编辑,如果您解决了自己的问题,请发布答案并在计时器允许您在两天后接受。