C# 打开另一个窗体后关闭windows窗体
在我的应用程序中,我使用了两种表单C# 打开另一个窗体后关闭windows窗体,c#,winforms,c#-4.0,button,C#,Winforms,C# 4.0,Button,在我的应用程序中,我使用了两种表单mainform和子表单。mainForm具有简单的登录应用程序。单击main表单中的按钮(btn单击)(如果登录凭据匹配),应将其定向到子表单。这我很容易做到。但问题是,mainForm仍然可见,每当我关闭mainForm时,它也会关闭子表单。我不想发生这种事。如果我在函数之后给出this.Close(),同样的问题也会发生。 “如何在打开子窗体后关闭main窗体” 我尝试了以下代码: b单击事件: subForm newSubForm
mainform
和子表单
。mainForm
具有简单的登录应用程序。单击main表单
中的按钮(btn单击
)(如果登录凭据匹配),应将其定向到子表单
。这我很容易做到。但问题是,mainForm
仍然可见,每当我关闭mainForm
时,它也会关闭子表单。我不想发生这种事。如果我在函数之后给出this.Close()
,同样的问题也会发生。
“如何在打开子窗体后关闭main窗体
”
我尝试了以下代码:
b单击事件:
subForm newSubForm = new subForm();
newSubForm.Show();
newSubForm.RegisterMainForm(this);
this.Close();
RealStestMyFrm只是一个考虑实际<代码>子窗体< /代码>的内部方法。
尝试下面的
subForm newSubForm = new subForm();
newSubForm.Parent = this;
newSubForm.ShowDialog();
this.Hide();
试试下面的方法
subForm newSubForm = new subForm();
newSubForm.Parent = this;
newSubForm.ShowDialog();
this.Hide();
关闭主窗体后,应用程序的消息循环终止,从而导致整个应用程序退出。Windows消息循环绑定到主窗体,因为它是您启动的窗体
运行(新的mainform()
在程序中尝试其他方法
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainForm mf = new MainForm();
if (mf.ShowDialog() == DialogResult.OK)
{
subForm newSubForm = new subForm();
newSubForm.RegisterMainForm(this);
Application.Run(newSubForm);
}
}
关闭主窗体后,应用程序的消息循环终止,从而导致整个应用程序退出。Windows消息循环绑定到主窗体,因为它是您启动的窗体
运行(新的mainform()
在程序中尝试其他方法
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainForm mf = new MainForm();
if (mf.ShowDialog() == DialogResult.OK)
{
subForm newSubForm = new subForm();
newSubForm.RegisterMainForm(this);
Application.Run(newSubForm);
}
}
我不知道您为什么要关闭主窗体。在这种情况下,mainForm
是应用程序可执行表单。如果关闭main表单
,所有其他表单也将关闭
你真正想做什么?我觉得你表格的命名有点麻烦mainForm
对我来说意味着,你的应用程序的主要部分将以这种形式执行,是吗
为什么不构建一个LoginForm
,它将在应用程序启动且用户当前未经验证后显示?我认为这不应该回避你的目的,这将是一个干净的解决方案
一些代码示例:
public partial class MainForm : Form
{
private bool isVerified = false;
public MainForm()
{
InitializeComponent();
InitializeLogin();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void InitializeLogin()
{
if (!isVerified)
{
using (LoginForm login = new LoginForm())
{
if (login.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("Login successful!");
isVerified = true;
}
}
}
else
{ }
}
这是LoginForm
,在初始化主窗体并且当前没有经过验证的用户后将调用该窗体。请注意,这只是演示代码,但可能是一种可能的实现
public partial class LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (IsUser())
{
// the DialogResult of the Form must be set
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
}
private bool IsUser()
{
return true;
}
另一个想法是构建一个引导程序,在像Sathish Raja的解决方案那样加载任何表单之前,它可以管理您的应用程序.Run()
方法
一些其他想法:
public partial class MainForm : Form
{
private bool isVerified = false;
public MainForm()
{
InitializeComponent();
InitializeLogin();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void InitializeLogin()
{
if (!isVerified)
{
using (LoginForm login = new LoginForm())
{
if (login.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("Login successful!");
isVerified = true;
}
}
}
else
{ }
}
- 避免用户在用户名/密码文本框中填写凭据之前单击登录按钮
- 您可以更灵活地构建此版本,并扩展LoginForm以验证应用程序中特殊密码安全部分的用户,但第一个“版本”可以在应用程序范围内重用
我不知道您为什么要关闭主窗体。在这种情况下,mainForm
是应用程序可执行表单。如果关闭main表单
,所有其他表单也将关闭
你真正想做什么?我觉得你表格的命名有点麻烦mainForm
对我来说意味着,你的应用程序的主要部分将以这种形式执行,是吗
为什么不构建一个LoginForm
,它将在应用程序启动且用户当前未经验证后显示?我认为这不应该回避你的目的,这将是一个干净的解决方案
一些代码示例:
public partial class MainForm : Form
{
private bool isVerified = false;
public MainForm()
{
InitializeComponent();
InitializeLogin();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void InitializeLogin()
{
if (!isVerified)
{
using (LoginForm login = new LoginForm())
{
if (login.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("Login successful!");
isVerified = true;
}
}
}
else
{ }
}
这是LoginForm
,在初始化主窗体并且当前没有经过验证的用户后将调用该窗体。请注意,这只是演示代码,但可能是一种可能的实现
public partial class LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (IsUser())
{
// the DialogResult of the Form must be set
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
}
private bool IsUser()
{
return true;
}
另一个想法是构建一个引导程序,在像Sathish Raja的解决方案那样加载任何表单之前,它可以管理您的应用程序.Run()
方法
一些其他想法:
public partial class MainForm : Form
{
private bool isVerified = false;
public MainForm()
{
InitializeComponent();
InitializeLogin();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void InitializeLogin()
{
if (!isVerified)
{
using (LoginForm login = new LoginForm())
{
if (login.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("Login successful!");
isVerified = true;
}
}
}
else
{ }
}
- 避免用户在用户名/密码文本框中填写凭据之前单击登录按钮
- 您可以更灵活地构建此版本,并扩展LoginForm以验证应用程序中特殊密码安全部分的用户,但第一个“版本”可以在应用程序范围内重用
感谢您的回复。为此,我可能应该在打开子表单之前使用MessageBox,对吗?为什么在打开子表单之前需要MessageBox?而且我正在尝试在不同的条件下打开两个不同的表单。。比如如果-->子表单
,或者如果-->子表单1
else-->显示错误对话框。在这种情况下,我可以使用它吗?ShowDialog将以模态对话框的形式显示主窗体,在btnClick事件中,只需设置DialogResult,`private void button1\u单击(object sender,EventArgs e){if(LoginVerified){this.DialogResult=DialogResult.OK;}否则{this.DialogResult=DialogResult.Cancel;}`在mainform中设置一些属性并访问它们,以便在子表单之间切换响应。为此,我可能应该在打开子表单之前使用MessageBox,对吗?为什么在打开子表单之前需要MessageBox?而且我正在尝试在不同的条件下打开两个不同的表单。。比如如果-->子表单
,或者如果-->子表单1
else-->显示错误对话框。在这种情况下,我可以使用它吗?ShowDialog将以模态对话框的形式显示主窗体,在btnClick事件中,只需设置DialogResult,`private void button1\u单击(object sender,EventArgs e){if(LoginVerified){this.DialogResult=DialogResult.OK;}否则{this.DialogResult=DialogResult.Cancel;}`在主窗体中设置一些属性并访问它们以在子窗体之间切换hide()的问题是,即使在关闭主窗体后,应用程序仍在后台运行