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