c#windows窗体-窗体数量有限?
我对c#和Windows窗体有一个问题 我正在开发一个需要10多张表格的应用程序 我开始通过单击按钮关闭表单,然后开始创建新表单。它工作得很好 但现在我在五年级。我无法将任何按钮与此新表单链接。。。 在早期的形式中,它起作用了 表格的数量有限制吗 谢谢你的帮助 来自德国的问候 代码:在这里工作c#windows窗体-窗体数量有限?,c#,windows,forms,C#,Windows,Forms,我对c#和Windows窗体有一个问题 我正在开发一个需要10多张表格的应用程序 我开始通过单击按钮关闭表单,然后开始创建新表单。它工作得很好 但现在我在五年级。我无法将任何按钮与此新表单链接。。。 在早期的形式中,它起作用了 表格的数量有限制吗 谢谢你的帮助 来自德国的问候 代码:在这里工作 namespace WindowsFormsApplication1 { public partial class Form3: Form { public Form3()
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()代码>和类似的内容应该使用
块放在中。这不是问题的原因,但这是一个很好的做法。您是否复制并粘贴了代码?如果您这样做,事件处理程序不会自动连接。确保已订阅事件处理程序。