当前位置:编程学习 > C#/ASP.NET >>

求助?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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,