在整个程序中,表单都是这样打开的:
FormName.SomeValue = 10
FormName.ShowDialog()
而不是通常的
Dim myForm As New FormName
myForm.SomeValue = 10
myForm.ShowDialog()
(我们无能为力 - 这是由Visual Studio VB6自动完成的 - > VB.Net转换器)
问题在于,当表单关闭时,它们似乎并非真正关闭,只是隐藏 - 如果我向文本框添加一些文本并关闭/重新打开表单,文本仍然存在,而不是文本框被清除像平常一样。这可能是因为表单始终使用相同的实例。
除了完成整个程序并为每个ShowDialog()
调用创建一个新的表单实例(有数百个)之外,有没有简单的方法可以解决此问题 >
我们考虑重置每个表单的Load
事件中的每个控件,但这仍然很痛苦,所以我们认为我们先问一下是否有更简单的方法。
答案 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)
如果问题是关于清除文本框,那么我会重新清除所有这些文件
For Each Control in Controls
If Control is type of TextBox
Control.Clear
Next
如果您通过任何DATASOURCE绑定控件我建议清除数据源和REBIND