求助?vb.net中如何遍历程序所有窗体中的控件???
程序有多个窗体(form1,dialog1),在这些窗体中有些控件来获取用户输入的信息。但是想在做一个“新建”按钮来初始化所有窗体中的控件内容也就是让程序回到初始状态。程序本身不复杂:form1上有个textbox1,有两个按钮其中一个按钮作用为“新建”另一个按钮用来打开dialog1。dialog1上边就有一个textbox。我用reflection,assembly,和basetype已经可以找到form1和dialog1了。但主要问题是如何使用这些字符串?尝试用Activator.CreateInstance但是不成功。执行结果form1中的控件修改了,而dialog1中的控件都没有变化。form1和dialog1中的标题都没有变。(我知道这个程序把所有的控件的text属性都修改了,作为演示并不重要。)
我希望的效果是能够在form1和dialog1中都修改(包括text属性和控件的默认值)。查了半天也没解决。问题出在哪里?应该是什么思路?怎么能解决?各位大大们帮帮忙。我市初学者。用vb2008速成版。
Imports System.Reflection
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myAssembly As Assembly = Assembly.GetExecutingAssembly()
Dim types As Type() = myAssembly.GetTypes()
Dim myType As Type
Dim returnForm As Form
For Each myType In types
If myType.BaseType.ToString = "System.Windows.Forms.Form" Then
returnForm = Activator.CreateInstance(myType)
returnForm.Text = "Changed"
Dim ctrl As Control
For Each ctrl In Controls
ctrl.Text = "Good"
Next
End If
Next
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dialog1.Show()
End Sub
End Class --------------------编程问答-------------------- 楼主可以尝试用下Form.controls --------------------编程问答-------------------- 能详细写么?实在是新手。returnForm.Text = "Changed" 这一举好像不执行,但是如果用returnForm.show()来验证标题都改了。然而我觉得用了show()以后显示form1和dialog1是新的窗体而不是原先的窗体。是不是因为用了 Activator.CreateInstance的原因?还有没有其他方法是先这个初始化功能?实在是很困扰!多谢了 --------------------编程问答-------------------- 自己顶一下,希望能有大大帮忙。 --------------------编程问答-------------------- 没人清楚吗?还有就是对没有加载的窗体可以进行操作或者后台操作吗? --------------------编程问答--------------------
Public Class Form1--------------------编程问答-------------------- 楼上正解
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim frm As New dialog1
frm.Show()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each f As Form In Application.OpenForms
f.Text = "Changed"
For Each c As Control In f.Controls
If TypeOf c Is TextBox Then
c.Text = "Good"
End If
Next
Next
End Sub
End Class
补充:.NET技术 , VB.NET