【发布时间】:2021-02-21 09:55:25
【问题描述】:
我有以下子程序:
Public Sub MyCodes_Users_Salahiyat()
MyPubVar_Dt_Op_Salahiyat = New DataTable()
MyPubVar_Dt_Op_Salahiyat.Columns.Add("Op_ID", Type.GetType("System.String"))
MyPubVar_Dt_Op_Salahiyat.Columns.Add("FrmName", Type.GetType("System.String"))
MyPubVar_Dt_Op_Salahiyat.Columns.Add("CmdName", Type.GetType("System.String"))
MyPubVar_Dt_Op_Salahiyat.Columns.Add("FrmCaption", Type.GetType("System.String"))
MyPubVar_Dt_Op_Salahiyat.Columns.Add("CmdCaption", Type.GetType("System.String"))
Dim FormType As Type = Me.GetType().BaseType
Dim xForms As List(Of Form) =
(From t In [GetType]().Assembly.GetTypes()
Where t.IsSubclassOf(FormType) = True Select DirectCast(Activator.CreateInstance(t), Form)).ToList()
For Each xFrm In xForms
Dim xCtrl As Control = xFrm.GetNextControl(xFrm, True)
Dim xid As Integer
Do Until xCtrl Is Nothing
If xCtrl Is Nothing Then
GoTo Line1
Else
If xCtrl.GetType = GetType(Button) Then
xid = xid + 1
MyPubVar_Dt_Op_Salahiyat.Rows.Add(xid, xFrm.Name, xCtrl.Name, xFrm.Text, xCtrl.Text)
End If
End If
Line1:
xCtrl = xFrm.GetNextControl(xCtrl, True)
Loop
Next
End Sub
但是当我调用该过程时,我得到了以下错误:
无法将“CementAccSys.My.MyApplication”类型的对象转换为类型 'System.Windows.Forms.Form
奇怪的是,当我从另一个表单调用该过程时,错误不会出现!
【问题讨论】:
-
在什么情况下你在这里调用
Me?从?班级?显示包含此方法的类。也许您的意思是Form的类型?此外,最好使用 Iterator 函数以递归方式获取控件,而不是GoTo。 -
其实,我是从论坛上得到那个代码的,你能解释一下吗,我是个初学者。
-
如果要获取当前项目的表格:
Dim forms = Assembly.GetExecutingAssembly().GetTypes().Where(Function(t) GetType(Form).IsAssignableFrom(t))。循环并为Using .. End Using块中的每个表单创建实例,然后完成剩下的工作。 -
使用this方法获取控件。
-
@dr.null 我得到了表格,但是我怎样才能得到表格文本或表格名称?或者甚至对我们从代码中得到的所有表单进行循环?,谢谢
标签: vb.net