在我的申请中,我使用了两种表单mainform
和subForm
。 mainForm
具有简单的登录应用程序。单击btnClick
中的按钮(mainForm
)(如果登录凭据匹配),它应该定向到subForm
。我可以轻松做到这一点。但问题是mainForm
仍然可见,每当我关闭mainForm
时,它也会关闭subForm
。我不想发生这种事。如果我在功能发生后发出this.Close()
{。}}
“打开mainForm
后如何关闭subForm
。
我尝试过以下代码:
btnClick活动:
subForm newSubForm = new subForm();
newSubForm.Show();
newSubForm.RegisterMainForm(this);
this.Close();
RegisterMainForm只是一个考虑实际subForm
的内部方法。
答案 0 :(得分:2)
关闭主窗体后,应用程序的消息循环终止,导致整个应用程序退出。 Windows消息循环与您的主窗体绑定,因为这是您启动的那个 Application.Run(new mainform())。
在Program.cs中尝试其他方法
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);
}
}
答案 1 :(得分:1)
尝试以下
subForm newSubForm = new subForm();
newSubForm.Parent = this;
newSubForm.ShowDialog();
this.Hide();
答案 2 :(得分:1)
我不知道您为什么要关闭mainForm
。在这种情况下,mainForm
是应用程序可执行表单。如果您关闭mainForm
,则所有其他表单也将关闭。
你真的想做什么?我认为你的表单的命名有点令人烦恼。 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
,将在Mainform初始化之后调用,并且当前没有经过验证的用户。请注意,这只是演示代码,但可能是一种可能的实现。
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;
}
另一个想法是构建一个在加载任何表单之前管理Application.Run()
方法的引导程序,如Sathish Raja S解决方案。
一些额外的想法: