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。这可能吗?如果可能,这是一个好的解决方案吗?

Windows窗体打开其他窗体

我不太明白为什么要完全关闭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();
}

VerhuurFormFactuurForm中,您可以像这样覆盖闭包事件:

public VerhuurForm()
{
    InitializeComponent();
    this.FormClosed += new FormClosedEventHandler(VerhuurForm_FormClosed);
}
void FormClosedEventHandler(object sender, FormClosedEventArgs e)
{
    Application.Exit();
}

要确保你的应用程序是关闭的,如果你关闭的形式,因为Home仍然是活跃的,但隐藏。