【问题标题】:c# windows forms - limited number of forms?c# windows forms - 表单数量有限?
【发布时间】:2018-09-17 18:25:34
【问题描述】:

我有一个关于 c# 和 Windows 窗体的问题。

我正在开发一个需要超过 10 个表单的应用程序。

我开始通过单击按钮关闭表单并开始新表单。效果很好。

但现在我的表格没有。 5. 我无法将任何按钮链接到这个新表单... 在早期的形式中,它有效吗??

表格的数量有限制吗?

感谢您的帮助!

来自德国的问候

代码:在这里可以工作

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();

        }
    }
}

【问题讨论】:

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

标签: c# windows forms


【解决方案1】:

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

如果你使用Hide()函数,它只是设置了表单的属性Visibility.Hidden,这意味着表单仍然在后台运行。

现在,当您将函数从Form4 调用为“关闭”并打开Form3 时,您只是隐藏了Form4,如果您想回调Form4,您将创建两个@ 987654329@(同类型),因为它还在后台。

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

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();
    }

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 2011-11-07
    • 2018-04-14
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    相关资源
    最近更新 更多