Dim asm As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly()
Dim frm As New Form
Dim sss As String = "WLG.FrmMuDi"
frm = CType(asm.CreateInstance((sss)), Form)
frm.MdiParent = MDIForm
sss是随便设置的,首先这样写是好用的;
Dim asm As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly()
Dim frm As New Form
dim s as string ="FrmMuDi"
Dim sss As String = "WLG." & s
frm = CType(asm.CreateInstance((sss)), Form)
frm.MdiParent = MDIForm这样竟然是不好用的,跟踪的时候sss是正确的字符串组合——但是同样的字符串,返回的frm
一个是正常的窗体,一个就是Nothing,狂汗了~~大小写都没有区别。
因为这里是个Function,所以传进去一个窗体名称字符串,却出了这个问题——这个函数在其他系统内也没出现过这个现象啊跟踪到frm = CType(asm.CreateInstance((sss)), Form)
这里sss的值,两种写法是没有任何差异的,但是就是返回值不同组合出来的,就是出不来
原函数写法 Public Function OpenWindow(ByVal MDIForm As MDIParent, ByVal FormName As String, Optional ByVal NewWindow As Boolean = False, Optional ByVal MaxWindow As Boolean = True) As Form
'检查是否已经存在了
Dim II As Integer, tempChild As Form
If NewWindow = False Then
For II = 0 To MDIForm.MdiChildren.Length - 1
tempChild = CType(MDIForm.MdiChildren(II), Form)
If tempChild.Name = FormName Then
tempChild.Focus() : Return tempChild
End If
Next
End If
' 也可以用反射动态加载其他的assembly
Dim asm As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly()
Dim frm As New Form
'问题就在这里,一旦用FormName这个字符串,就会返回Nothing,汗了
Dim s As String = FormName.ToString
Dim sss As String = "WLG." & s
frm = CType(asm.CreateInstance((sss)), Form) frm.MdiParent = MDIForm
frm.StartPosition = FormStartPosition.Manual
If MaxWindow = True Then frm.WindowState = FormWindowState.Maximized
frm.Show()
Return frm
End Function
Private Sub MuDiMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MuDiMenuItem.Click
OpenWindow(Me, "FrmMudi") ‘无法打开新的窗口
End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenWindow(Me, "FrmMuDi") '正常
End Sub
这是 与关系吧。。
如果字符串拼接应该是“+”
VB 或者vb.net 应该一样吧
都一样的呢,所以才很奇怪~~可惜我删除窗体没备份,呵呵,见了鬼的Bug
不过很好奇的是,你的
asm拿来干嘛?好像没用的? ' 也可以用反射动态加载其他的assembly
Dim asm As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly()
没错。就是你了。果然是你。
个人感觉不会有这么诡异的情况。
FrmMudi
FrmMuDi Private Sub MuDiMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MuDiMenuItem.Click
OpenWindow(Me, "FrmMudi") ‘无法打开新的窗口
End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenWindow(Me, "FrmMuDi") '正常
End Sub
Public Function OpenWindow(ByVal MDIForm As MDIParent, ByVal FormName As String, Optional ByVal NewWindow As Boolean = False, Optional ByVal MaxWindow As Boolean = True) As Form
'检查是否已经存在了
Dim II As Integer, tempChild As Form
If NewWindow = False Then
For II = 0 To MDIForm.MdiChildren.Length - 1
tempChild = CType(MDIForm.MdiChildren(II), Form)
If tempChild.Name = FormName Then
tempChild.Focus() : Return tempChild
End If
Next
End If
' 也可以用反射动态加载其他的assembly
Dim asm As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly()
Dim frm As New Form
'问题就在这里,一旦用FormName这个字符串,就会返回Nothing,汗了
Dim s As String = FormName.ToString
Dim sss As String = "WLG." & s
frm = CType(asm.CreateInstance((sss)), Form) frm.MdiParent = MDIForm
frm.StartPosition = FormStartPosition.Manual
If MaxWindow = True Then frm.WindowState = FormWindowState.Maximized
frm.Show()
Return frm
End Function
不会vb喔