我在 VS Studio 2008 Express Edition 中创建了 2 个表单,并在主 program.cs 文件中使用 public static 声明它们
我只想使用 ShowDialog 和 Close 在两个表单之间切换,但是当尝试关闭第二个表单并使用 showdialog 再次打开第一个表单时,它说当表单已经可见时我无法使用 showDialog,但事实并非如此,因为我之前关闭它以显示第二种形式。
它要求我在使用 showdialog 之前将表单可见属性设置为 false,所以我这样做了
internal static void CloseSecondForm(FirstForm FirstForm)
{
FirstForm .Close();
SecondForm.Visible = false;
SecondForm.ShowDialog();
}
但随后它说我无法使用 ShowDialog,因为表单已在对话框模式下显示,我必须关闭它。所以我按照它的要求做了
internal static void CloseSecondForm(FirstForm FirstForm)
{
FirstForm .Close();
SecondForm.Visible = false;
SecondForm.Close();
SecondForm.ShowDialog();
}
但它仍然假装表单已经用 ShowDialog 打开!
这是我的程序或 Winform 中的错误吗?
更新:这是我在第五个答案中发布的完整代码(我想使用 showdialog 而不是显示,因为我可能在后台有第三个表单,我不希望用户访问):
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 = new Form1();
Form2 = new Form2();
Form1.ShowDialog();
Application.Run();
}
// called from Form1 BUTTON
internal static void ShowForm2(Form1 Form1)
{
Form1.Hide();
Form2.ShowDialog();
}
// called from Form2 BUTTON
internal static void ShowForm1(Form2 Form2)
{
Form2.Hide();
Form1.ShowDialog();
}
我按照建议尝试了隐藏,但它也不起作用。这就是整个程序,我想做的非常简单:我最初在程序中创建了两个表单,每个表单上都有一个按钮来关闭自身并打开另一个。我将所有逻辑放在下面的program.cs中:
using System;
using System.Windows.Forms;
namespace twoforms
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
///
public static Form1 Form1;
public static Form2 Form2;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 = new Form1();
Form2 = new Form2();
Form1.ShowDialog();
Application.Run();
}
// called from Form1 BUTTON
internal static void ShowForm2(Form1 Form1)
{
Form1.Hide();
Form2.ShowDialog();
}
// called from Form2 BUTTON
internal static void ShowForm1(Form2 Form2)
{
Form2.Hide();
Form1.ShowDialog();
}
}
}