c#windows窗体-窗体数量有限?

c#windows窗体-窗体数量有限?,c#,windows,forms,C#,Windows,Forms,我对c#和Windows窗体有一个问题 我正在开发一个需要10多张表格的应用程序 我开始通过单击按钮关闭表单,然后开始创建新表单。它工作得很好 但现在我在五年级。我无法将任何按钮与此新表单链接。。。 在早期的形式中,它起作用了 表格的数量有限制吗 谢谢你的帮助 来自德国的问候 代码:在这里工作 namespace WindowsFormsApplication1 { public partial class Form3: Form { public Form3()

我对c#和Windows窗体有一个问题

我正在开发一个需要10多张表格的应用程序

我开始通过单击按钮关闭表单,然后开始创建新表单。它工作得很好

但现在我在五年级。我无法将任何按钮与此新表单链接。。。 在早期的形式中,它起作用了

表格的数量有限制吗

谢谢你的帮助

来自德国的问候

代码:在这里工作

namespace WindowsFormsApplication1
{
    public partial class Form3: Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form4 f4 = new Form4();
            f4.ShowDialog();
        }
    }
}
代码:这里它不工作了

namespace WindowsFormsApplication1
{
    public partial class Form4: Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form3 f3 = new Form3();
            f3.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {

                this.Hide();
                Form5 f5 = new Form5();
                f5.ShowDialog();

        }
    }
}

这是因为您使用的是
Hide()
而不是
Close()

如果使用
Hide()
函数,它只会设置窗体的属性
Visibility.Hidden
,这意味着窗体仍在后台运行

现在,当您从
Form4
调用函数“Close”并打开
Form3
时,您只是隐藏
Form4
,如果您想回调用
Form4
,您可以创建两个
Form4
(相同类型),因为它仍然在后台

我喜欢的一种方法是在创建新表单之前检查表单是否已打开:

private void button1_Click(object sender, EventArgs e)
    {
        Close();
        var app = Application.OpenForms["Form3"];
        if (app == null)
        {
            Form3 f3 = new Form3();
            f3.Show();
        }
        else {  app.Show(); app.BringToFront(); }
    }
或者您可以直接调用一个新表单,但请确保关闭该表单

private void button1_Click(object sender, EventArgs e)
    {
        Close();
        Form3 f3 = new Form3();
        f3.Show();
    }

解释“我不能将任何按钮链接到这个新表单”是什么意思。我不明白。你有一个表单,用户点击一个按钮,你隐藏了这个按钮所在的表单,然后弹出另一个表单。当用户单击对话框上的
确定
取消
关闭
时会发生什么情况?没有控制权可以回归的地方。原始形式是隐藏的(因此不起作用)。情态形式被驳回。你的用户界面不见了。你想得到什么
this.Hide();otherForm.ShowDialog()
是一个奇怪的构造,我不明白你为什么要这么做;otherForm.ShowDialog()这样用户只能与新表单交互,而不能与弹出的表单交互。如果是这样,请跳过
Hide
调用,而是使用
this
作为参数调用
ShowDialog
ShowDialog(this)
ShowDialog
的重载将弹出对话框,不允许任何人访问原始表单。检查
ShowDialog
的返回值通常也很有用。它可以告诉您用户是如何取消对话框的(
OK
Cancel
,等等)。不,没有限制,但是资源是有限的,所以请尽量确保您处理可识别的东西。例如
form3f3=newform3()和类似的内容应该使用
块放在
中。这不是问题的原因,但这是一个很好的做法。您是否复制并粘贴了代码?如果您这样做,事件处理程序不会自动连接。确保已订阅事件处理程序。