|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
How to set an objects property using Reflectioni have a sub that opens a form given the form's name as string and opens it using System.Reflection. How can I set the form's properties at runtime. Here is my code. Public Sub OpenForm(ByVal cFormName) Dim frm As Object Dim frmType As Type Try frmType = Type.GetType(System.Reflection.Assembly.GetExecutingAssembly.GetName.Name() & cFormName) frm = Activator.CreateInstance(frmType) '********************************** ' i would like to set the form's mdichild property, text, etc before i show it. how can this be done? '********************************** frmType.InvokeMember("Show", Reflection.BindingFlags.InvokeMethod, Nothing, frm, Nothing) Catch ex As Exception MsgBox(ex.Message) End Try End Sub thanks in advance diego well just cast the object pointer to the actuall interface and you can do
everything you want In your eaxample code i do not see what is the advantage to use reflection i only use reflection when i need a generic object invoke pattern ( late bound with public interface ) i.o.w. a plugin architecture regards Michel Posseth Show quoteHide quote "diego" <diego***@yahoo.com> schreef in bericht news:1165042499.296574.75350@j72g2000cwa.googlegroups.com... > hi everyone, > > i have a sub that opens a form given the form's name as string and > opens it using System.Reflection. How can I set the form's properties > at runtime. Here is my code. > > Public Sub OpenForm(ByVal cFormName) > Dim frm As Object > Dim frmType As Type > > Try > frmType = > Type.GetType(System.Reflection.Assembly.GetExecutingAssembly.GetName.Name() > & cFormName) > frm = Activator.CreateInstance(frmType) > > '********************************** > ' i would like to set the form's mdichild property, text, etc before i > show it. how can this be done? > '********************************** > > frmType.InvokeMember("Show", > Reflection.BindingFlags.InvokeMethod, Nothing, frm, Nothing) > Catch ex As Exception > MsgBox(ex.Message) > End Try > End Sub > > > thanks in advance > > diego > Hi Michael,
thanks for your reply. what i want to do is, read all my menu items from a database and from that get the corresponding form name to be opened when the menu item is clicked. Anyway i have found a way to do it. below is my code. Please tell me of what the disadvatahes are when using this approach. Thanks in advance. '********************************************* Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load LoadMenu() Me.Menu = mnuMain End Sub Public Sub OpenForm(ByVal cFormName, ByVal frmParent) Dim frm As Object Dim frmType As Type Dim oForm As Form Dim lIsOpen As Boolean Try frmType = Type.GetType(System.Reflection.Assembly.GetExecutingAssembly.GetName.Name() & "." & cFormName) frm = Activator.CreateInstance(frmType) oForm = DirectCast(frm, Form) If Not IsFormOpen(cFormName) Then frmType.InvokeMember("Show", Reflection.BindingFlags.InvokeMethod, Nothing, oForm, Nothing) End If oForm.BringToFront() oForm.MdiParent = frmParent Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Function IsFormOpen(ByVal cFormName As String) As Boolean Dim oForm As Form Dim lRet As Boolean = False Try For Each oForm In Me.MdiChildren If oForm.Name = cFormName Then If oForm.Visible Then lRet = True Exit For End If End If Next Catch ex As Exception Finally IsFormOpen = lRet End Try End Function Private Sub LoadMenu() Dim oItem As MyMenuItem Dim lFirst As Boolean = True mnuMain.MenuItems.Clear() Try cmd = cnn.CreateCommand With cmd .CommandText = "SELECT * FROM MENUS ORDER BY ID" .CommandType = CommandType.Text End With da.SelectCommand = cmd da.Fill(ds, "MENUS") For Each oRow As DataRow In ds.Tables(0).Rows Select Case oRow("MENUTYPE") Case 1 ' TOP LEVEL MENU If Not lFirst Then mnuMain.MenuItems.Add(oMenuItem) Else lFirst = False End If oMenuItem = New MenuItem(oRow("MENUITEM")) Case 2 ' MENU ITEM If oRow("MENUKIND") = 0 Then ' EXIT MENU ' CloseMe() just calls Me.Close() oItem = New MyMenuItem(oRow("MENUITEM"), New System.EventHandler(AddressOf CloseMe)) Else ' REGULAR MENU ITEM ' I HAVE CREATED A CLASS THAT INHERITS FROM THE MENUITEM CLASS ' SO THAT I CAN STORE THE FORM'S NAME IN THE MENUITEM ' DoMenu simply calls the OpenForm procedure oItem = New MyMenuItem(oRow("MENUITEM"), New System.EventHandler(AddressOf DoMenu)) oItem.FormName = oRow("FORMNAME") End If oMenuItem.MenuItems.Add(oItem) End Select Next mnuMain.MenuItems.Add(oMenuItem) Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub DoMenu(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim oItem As MyMenuItem oItem = DirectCast(sender, MyMenuItem) OpenForm(oItem.FormName, Me) End Sub '********************************************* Ayon kay Michel Posseth [MCP]: Show quoteHide quote > well just cast the object pointer to the actuall interface and you can do > everything you want > > In your eaxample code i do not see what is the advantage to use reflection > i only use reflection when i need a generic object invoke pattern ( late > bound with public interface ) i.o.w. a plugin architecture > > regards > > Michel Posseth > > > "diego" <diego***@yahoo.com> schreef in bericht > news:1165042499.296574.75350@j72g2000cwa.googlegroups.com... > > hi everyone, > > > > i have a sub that opens a form given the form's name as string and > > opens it using System.Reflection. How can I set the form's properties > > at runtime. Here is my code. > > > > Public Sub OpenForm(ByVal cFormName) > > Dim frm As Object > > Dim frmType As Type > > > > Try > > frmType = > > Type.GetType(System.Reflection.Assembly.GetExecutingAssembly.GetName.Name() > > & cFormName) > > frm = Activator.CreateInstance(frmType) > > > > '********************************** > > ' i would like to set the form's mdichild property, text, etc before i > > show it. how can this be done? > > '********************************** > > > > frmType.InvokeMember("Show", > > Reflection.BindingFlags.InvokeMethod, Nothing, frm, Nothing) > > Catch ex As Exception > > MsgBox(ex.Message) > > End Try > > End Sub > > > > > > thanks in advance > > > > diego > >
best way to learn Windows Forms
Upgrading Access 97 application to dotNet For loop variable date Merging two tables in Dataset? I only want to get the matching info based on the two key fields Manage DataBase Best Approach When Saving a New Project How do you start an assembly dynamically with constructors Enter Key vs. Tab Key Changing Color of TextBox on Hover - With Correct Examples!!! Drag and Drop controls during runtime in Windows App |
|||||||||||||||||||||||