Windows窗体打开其他窗体
本文关键字:窗体 其他 Windows | 更新日期: 2023-09-27 18:16:42
我想要的
我正在创建一个有两个功能的应用程序。这两个功能都有自己的表单(称为FactuurForm和VerhuurForm)。我有另一个名为Home的表单,它有两个按钮。根据所单击的按钮,我希望打开两个表单中的一个,并完全关闭Home-form。
What I have
目前,我有以下代码:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Home home = new Home();
home.ShowDialog();
if (home.kiesFactuur)
{
FactuurForm factuur = new FactuurForm();
home.Close();
factuur.ShowDialog();
}
else if (home.kiesVerhuur)
{
VerhuurForm verhuur = new VerhuurForm();
home.Close();
verhuur.ShowDialog();
}
}
}
kiesFactuur和kiesVerhuur是布尔值,在我的Home类中初始化为false。只要我点击其中一个按钮,相应的布尔值就会变为true,触发if语句关闭home表单并打开新表单。
我的问题
虽然我目前的代码可以工作,但对于这样一个简单的功能来说,它似乎有点太多了。我觉得我不需要布尔值,这就更简单了。那么,有没有更简单/更好的方法来做到这一点呢?
我还考虑过创建多个Main函数。单击按钮将激活相应的新Main函数并终止当前Main。这可能吗?如果可能,这是一个好的解决方案吗?
我不太明白为什么要完全关闭home表单。我只需为每个按钮放置2个事件处理程序,并对它们调用以下代码。当您关闭子表单时,第一个表单将被隐藏并关闭。
private void ShowSubDialog(Form form)
{
this.Hide(); //makes your main form invisible before showing the subform
form.ShowDialog();
}
private void button1_Click(object sender, EventArgs e)
{
ShowSubDialog(new FactuurForm());
Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
ShowSubDialog(new VerhuurForm());
Dispose();
}
private void Factuur_Click(object sender, EventArgs e) {
LoadForm(new FactuurForm());
}
private void Verhuur_Click(object sender, EventArgs e) {
LoadForm(new VerhuurForm());
}
private void LoadForm(Form f) {
this.Hide();
f.ShowDialog();
this.Show();
}
将此添加到Home窗体中,从Main中删除Home . showdialog()之后的所有内容,并使Facturr_Click和Verhurr_Click处理各自按钮的单击事件。
你应该这样替换你的代码:
if (home.kiesFactuur)
{
FactuurForm factuur = new FactuurForm();
factuur.Show();
this.Hide();
}
else if (home.kiesVerhuur)
{
VerhuurForm verhuur = new VerhuurForm();
verhuur .Show();
this.Hide();
}
在VerhuurForm
和FactuurForm
中,您可以像这样覆盖闭包事件:
public VerhuurForm()
{
InitializeComponent();
this.FormClosed += new FormClosedEventHandler(VerhuurForm_FormClosed);
}
void FormClosedEventHandler(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
要确保你的应用程序是关闭的,如果你关闭的形式,因为Home
仍然是活跃的,但隐藏。