2010-11-01 20 views
8

Soy bastante nuevo en vb.net, y el desarrollo de formularios de Windows como un todo, por lo que esto podría ser muy básico, pero aquí va.constructores personalizados para formularios en vb.net: Mejores prácticas

Me gustaría abrir un nuevo formulario de otra forma, y ​​pasar algún objeto seleccionado de un control en ese formulario al nuevo formulario. La forma sensata de hacer esto, pensé, era como un parámetro para el constructor de formularios. Ahora sé que la GUI del Visual Studio crea clases parciales para mis formularios, que contienen las propiedades que puedo arrastrar allí en el diseñador. Supongo que también tiene un constructor predeterminado. Ya que podría hacer todo tipo de cosas que se necesita para inicializar el formulario, que pensé que debería llamarlo desde mi constructor de encargo ala

public sub new(byval my_parameter as Foo) 
    Me.new() 
    Me.my_parameter = my_parameter 
    do_some_initialisation() 
end sub 

que claramente no era él, porque no puede encontrar un constructor por defecto . El caso es que Visual Studio hace todo lo posible para evitar que vea el constructor generado, así que sé cómo acceder a él. Esto me lleva a creer que, en realidad, lo estoy haciendo mal, y debería haber emprendido un camino diferente, ya que la ruta a la que te obligan a hacerlo suele ser lo más sensato, lo que normalmente descubro demasiado tarde.

Entonces, ¿cómo debería estar haciendo algo como esto?

Respuesta

14

Este es un ejemplo bastante simple. Esto va en su forma "principal" (el que quiere llamar a su nueva forma de):

Dim childForm1 As New form2Name(item) 
childForm1.Text = "Title of your new form" 
Call childForm1.Show() 

form2Name(item) se rompe para arriba como "form2Name" es el nombre de la forma que desee abrir y "elemento" es el parámetro que se pasará

En su nueva forma (form2Name) Incluir este código:

Public Sub New(ByVal item As String) 
    InitializeComponent() ' This call is required by the Windows Form Designer. 
    MsgBox(item) 
End Sub 

Usted puede hacer cualquier otra cosa que necesita en su forma. Espero que esto ayude.

3

Para VB.Net creo que la llamada que está después es

MyBase.New() 
+0

+1 para brevitas – Martijn

+0

Combinding esto con el aswer a continuación: Si llamo 'MyBase.New()', hacer todavía tengo que llamar 'InitializeComponent()'? – Martijn

+0

El constructor de formulario predeterminado normalmente lo llama. TBH tu código está bien si solo eliminas la línea Me.new(). Simplemente estaba mostrando cómo llamar correctamente a un constructor base. –

2

Su clase de formulario derivado hereda automáticamente el constructor predeterminado para System.Windows.Forms.Form. Este constructor predeterminado se invoca automáticamente antes de que se ejecute su código constructor derivado. La razón por la que no se puede encontrar ningún código para el constructor predeterminado es porque la clase derivada no se especializa en el constructor predeterminado. Si desea definir su propio constructor predeterminado, puede. También puedes definir un constructor sin parámetros.

código debería funcionar bien si se quita esta línea:

Me.New() 
Cuestiones relacionadas