2014-12-22 3 views
2

В настоящее время у меня несколько форм (около 30 форм), и я переключаюсь между формами. Основная форма (Form1) имеет 29 кнопок, и каждая кнопка приведет меня к соответствующему номеру формы (пример: button3 = form3, button20 = form20 и т. Д.).VB 2010 Form Show

Я понимаю, что я могу использовать код:

me.hide 
form1.show 

Я хочу способ передать имя формы динамически, что-то вдоль линий:

me.controls(FormName).show 

Возможно ли это?

ответ

0

Создайте новый проект с тремя формами (Form1, Form2 и Form3). Положите две кнопки на Form1 (названный Button2 и Button3), затем поместите следующий исходный код в Form1:

Option Strict On 

Public Class Form1 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Call FormFromButton(DirectCast(sender, Button)) 
    End Sub 

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 
    Call FormFromButton(DirectCast(sender, Button)) 
    End Sub 

    Public Sub FormFromButton(btn As Button) 
    Dim i As Integer = CInt(btn.Name.Substring(6)) 'Get number after "button" (6 characters) 
    Dim f As Form = GetForm("Form" & i.ToString) 
    f.Show() 
    f.Activate() 
    End Sub 

    Public Function GetForm(formClassName As String) As Form 
    'see if it is already instanced 
    For Each f As Form In My.Application.OpenForms 
     If f.GetType.Name = formClassName Then Return f 
    Next f 
    'create new instance 
    Dim strFullName As String = Me.GetType.Namespace & "." & formClassName 
    Dim o As Object = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(strFullName) 
    Dim frm As Form = DirectCast(o, Form) 
    Return frm 
    End Function 

End Class 
0

Myself создал 4 формы один из родителей другой 3 (Форма Form3, Form4, Form5) является ребенок, и я был создан 3 кнопки в родительской форме, и что кнопка Текст form3, Form4, Form5

Imports System 
Imports System.Reflection 
Public Class Form2 
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     For Each ctrl As Control In Me.Controls 
      If TypeOf ctrl Is Button Then 
       Dim btn As Button 
       btn = DirectCast(ctrl, Button) 
       AddHandler btn.Click, AddressOf Me.buttonclick 
      End If 
     Next 
    End Sub 
    Private Sub buttonclick(sender As Object, e As EventArgs) 
     Dim frmname As Button = DirectCast(sender, Button) 
     Dim frmAssembly As Assembly = Assembly.LoadFile(Application.ExecutablePath) 
     For Each type As Type In frmAssembly.GetTypes 
      If type.BaseType = GetType(Form) Then 
       If (type.Name = frmname.Text) Then 
        Dim frmshow As Form = DirectCast(frmAssembly.CreateInstance(type.ToString()), Form) 
        For Each frm As Form In Me.MdiChildren 
         frm.Close() 
        Next 
        frmshow.Show() 
       End If 
      End If 
     Next 
    End Sub 
End Class 
0
Private Sub ButtonClick(ByVal sender As Object, e As System.EventArgs) 
    Dim btn As Button = DirectCast(sender, Button) 
    Dim formname As String = "form" & btn.Name(btn.Name.Length - 1) 
    Dim frm As Form = GetForm(formname) 
    frm.Show() 
End Sub 
Private Function GetForm(ByVal Formname As String) As Form 
    Dim t As Type = Type.GetType(Formname) ', True, True) 
    If t Is Nothing Then 
     Dim Fullname As String = Application.ProductName & "." & Formname 
     t = Type.GetType(Fullname, True, True) 
    End If 
    Return CType(Activator.CreateInstance(t), Form) 
End Function 
Private Sub AddHandlers() 
    AddHandler Button1.Click, AddressOf ButtonClick 
    AddHandler Button2.Click, AddressOf ButtonClick 
    AddHandler Button3.Click, AddressOf ButtonClick 
    AddHandler Button4.Click, AddressOf ButtonClick 
End Sub 
Private Sub RemoveHandlers() 
    RemoveHandler Button1.Click, AddressOf ButtonClick 
    RemoveHandler Button2.Click, AddressOf ButtonClick 
    RemoveHandler Button3.Click, AddressOf ButtonClick 
    RemoveHandler Button4.Click, AddressOf ButtonClick 
End Sub 
Private Sub Form2_Activated(sender As Object, e As System.EventArgs) Handles Me.Activated 
    AddHandlers() 
End Sub 
Private Sub Form2_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
    RemoveHandlers() 
End Sub