关闭后形成保留值

时间:2011-01-04 18:28:14

标签: vb.net winforms vb6-migration

在整个程序中,表单都是这样打开的:

FormName.SomeValue = 10
FormName.ShowDialog()

而不是通常的

Dim myForm As New FormName
myForm.SomeValue = 10
myForm.ShowDialog()

(我们无能为力 - 这是由Visual Studio VB6自动完成的 - > VB.Net转换器)

问题在于,当表单关闭时,它们似乎并非真正关闭,只是隐藏 - 如果我向文本框添加一些文本并关闭/重新打开表单,文本仍然存在,而不是文本框被清除像平常一样。这可能是因为表单始终使用相同的实例。

除了完成整个程序并为每个ShowDialog()调用创建一个新的表单实例(有数百个)之外,有没有简单的方法可以解决此问题 >

我们考虑重置每个表单的Load事件中的每个控件,但这仍然很痛苦,所以我们认为我们先问一下是否有更简单的方法。

6 个答案:

答案 0 :(得分:4)

public class MyForm: Form{

   private static MyForm myForm = null;

   public static DialogResult ShowDialog(bool newForm){
          if(newForm)
          {
                if(myForm != null) 
                    myForm.Dispose();
                myForm= new MyForm();
          }
          return myForm.ShowDialog();
   }

   public static DialogResult ShowDialog(){
          return ShowDialog(true);
   }
}

答案 1 :(得分:2)

您正在处理的内容称为表单的“默认实例”,并且是VB6天的结转。建议不要使用它。您可能不希望听到它,但代码库的最佳长期策略是以正确的方式重写表单初始化程序,而不是以Load()事件的形式执行某些hacky变通方法。你可能现在讨厌它,但是下次你需要处理这段代码时你会很感激。你甚至可以整理一个片段来为你做大部分的打字。

答案 2 :(得分:1)

编辑: 如何使用Using语句

显示表单
Using formName AS New FormName
    formName.SomeValue = 10
    formName.ShowDialog()
End Using

从此处显示的代码中可以看出,现在有static ShowDialog次调用已添加到您的FormName课程中。您应该能够将此方法编辑为旧表单的dispose,并创建并显示新表单。这可以帮助您避免在整个地方更改代码,只需在一个位置。

答案 3 :(得分:1)

您要求解决此问题的简便方法:

按以下方式更改ShowDialog()过程/函数调用:


   AS PROCEDURE                       |   AS FUNCTION
                                      | 
    FormName.ShowDialog()             |    r = FormName.ShowDialog()
    FormName.ShowDialog()             |    r = FormName.ShowDialog()
                                      |
   CHANGE TO                          |   CHANGE TO
                                      |
    Call New FormName.ShowDialog()    |    r = New FormName.ShowDialog()
    Call New FormName.ShowDialog()    |    r = New FormName.ShowDialog()

答案 4 :(得分:1)

我知道这是超级晚了但是 -

Form1.Dispose()

适合我。它会重置文本框。

答案 5 :(得分:0)

  1. 如果问题是关于清除文本框,那么我会重新清除所有这些文件

      For Each Control in Controls
          If Control is type of TextBox
          Control.Clear
      Next
    
  2. 如果您通过任何DATASOURCE绑定控件我建议清除数据源和REBIND

  3. 覆盖ShowDialog()方法。