C# 如何以ShowDialog()的形式打开窗体;我第一次打开表单但显示();我第二次打开同一张表格

C# 如何以ShowDialog()的形式打开窗体;我第一次打开表单但显示();我第二次打开同一张表格,c#,c#-2.0,C#,C# 2.0,我正在尝试打开inDepthScootForm并隐藏/关闭eScootForm。我正在尝试以ShowDialog()的形式打开此表单;我第一次打开它的时候,却如图所示();以后我会打开此表单 如果我遵循此方法,系统将在我第二次打开表单时崩溃 任何帮助都将不胜感激。我想您的“eScootForm”也有相同的实例。可能在显示新实例时尝试使用它,并在对话框关闭时进行处置,如下例所示: Forms.inDepthScootForm.passProductDetails(strProductName, s

我正在尝试打开inDepthScootForm并隐藏/关闭eScootForm。我正在尝试以ShowDialog()的形式打开此表单;我第一次打开它的时候,却如图所示();以后我会打开此表单

如果我遵循此方法,系统将在我第二次打开表单时崩溃


任何帮助都将不胜感激。

我想您的“eScootForm”也有相同的实例。可能在显示新实例时尝试使用它,并在对话框关闭时进行处置,如下例所示:

Forms.inDepthScootForm.passProductDetails(strProductName, strProductDescription);
   
Forms.inDepthScootForm.ShowDialog();

Forms.eScootForm.Hide();

ShowDialog仅在关闭后返回到函数,因此在show对话框关闭/完成后调用隐藏函数

首先,可以将其创建为一个
新的
对象,这样表单的每个实例都是唯一的(假设您不想将数据保留在其上),然后确保在完成后关闭并释放它。这将修复窗口已打开的错误

因此,首先隐藏第一个表单,然后显示希望显示的表单。如果使用using here,则如果showdialog引发异常,它仍将处理该异常

public void ShowMyDialogBox()
{
   var testDialog = new Form2();

   // Show Form2 as a modal dialog
   testDialog.ShowDialog(this);

   // Do things when the dialog is closed
   this.txtResult.Text = testDialog.TextBox1.Text;

   // then dispose it
   testDialog.Dispose();
}
如果这不是您想要的,请具体说明,即:“当我第二次显示x窗口时,我希望它是一个显示,而不是一个显示对话框”,但如果您这样做,请确保您向我们显示实际调用此窗口的父窗口,并且在您执行此操作时它是打开的


请编辑您的问题,以包括行和抛出错误的窗口?

您必须说明您遇到了什么错误,并显示代码。已以模式显示的表单无法显示为模式对话框。在调用showDialog之前关闭表单。“--这是我试图编写Show()代码的错误;这是第二次打开表单,但此错误不断出现Hi Nicholas,请在您的问题中更具体一点,您要打开两次哪个窗口?您的代码在这里显示不多,这些行是在eScootForm中吗?为什么要使用statics/globals而不是局部变量windows等。inDepthScootForm调用了两次吗?或者它是埃斯库特形式?请给我们一个复制错误的最小代码。Cheers,Slipochpublic void launchForm(){//声明一个数据类型为inDepthBikeForm的变量//IndepthCootForm是先前创建的新类类型//显示新表单//关闭当前表单表单。IndepthCootForm.PasspProductDetails(strProductName,strProductDescription);Forms.eScootForm.Dispose();Forms.inDepthScootForm.Show();Forms.eScootForm.Hide();}抱歉,我不太明白您的方法。我想打开这个表格作为展示();第二个,但作为ShowDialog();第一次。有没有一种方法我可以使用循环或者是否可以实现这一点?如果你处理你的eScootForm,你不能使用它之后。你需要按顺序调用你的东西//Forms.inDepthScootFrom=new//Forms.inDepthScootForm.passProductDetails(strProductName、strProductDescription)//Forms.inDepthScootForm.Hide();//GetDatafromIndeptHSCootForm//Dispose//set-Null我的主要目的是隐藏第一个表单,因为当我打开第二个表单时它仍然停留在背景中。好的,所以它看起来更像是一个导航前端设计。是否需要打开新窗口?如果不是,您可以在同一窗口中处理。
using(var win = new Forms.inDepthScootForm())) {
    win.passProductDetails(strProductName, strProductDescription);
    Forms.eScootForm.Hide();
    win.ShowDialog();
} //win gets disposed as soon as the program leaves this

Forms.eScootForm.Show();