2012-08-15 10 views
8

si creo un WinForms "myform", entonces se genera el siguiente código de placa de la caldera:¿Dónde debería aparecer InitializeComponent() en orden de código?

public partial class myForm: Form 
{ 
    public myForm() 
    { 

     //<<position 1 

     InitializeComponent(); 

     //<<position 2 

    } 
} 

Si agrego código adicional para el método constructor no se hace ninguna diferencia para el funcionamiento de la aplicación, si pongo mi código en la posición 1 o 2?

Respuesta

12

Sí, lo hace.

InitializeComponent es el método que VS genera que es responsable de crear y colocar los controles en un formulario.

El código en "posición 1" se ejecutará antes de que existan los controles. Si intenta acceder a un control en esta posición, obtendrá un NullReferenceException (por ejemplo, si intenta establecer el contenido de un TextBox). Código similar en "posición 2" funcionará como se espera.

Sin embargo, se utiliza para "posicionar 1": si tiene controles personalizados o comportamiento que dependen de las propiedades de su formulario, establecer esas propiedades en "posición 1" podría evitar que el código tenga que actualizarse si permite controles a crearse antes de que se establezcan esos valores.

1

en la función InitializeComponent(); creas todos tus objetos que pones en el diseño gráfico. si desea acceder a ellos, su código debe estar en position2.

2

Sí. Antes de InitializeComponent, no se han creado todos los controles.

+0

corto y dulce :) – whytheq

0

El button, textbox, combobox que se pone en la Form crea automáticamente un código code.This se genera en InitializeComponent()

Así que llamar a los controles que se pone en el Formulario de position 1 es mal porque los controles son nunca creado en ese punto de código.

Puede llamar y acceder a los controles que se pone en el Formulario de position 2

+0

gracias - pero como algunas de las otras respuestas mencionan - la posición 1 se pueden utilizar en algunas circunstancias – whytheq

0

Al igual que los otros han dicho, la posición 2 se debe utilizar en la mayoría de los casos. Sin embargo, hay excepciones donde ninguna de las posiciones funcionará, y en realidad tendrá que adjuntar su código a otro evento.

Ejemplo: Usted tiene un ScrollViewer y una imagen dentro de él. Se inserta un archivo de imagen grande en el componente imagen y quiere mostrar que lo que el centro de la imagen es visible en la salida, con una opción para desplazarse alrededor para ver el resto de la imagen:

scrollViewer1.ScrollToVerticalOffset(scrollViewer1.ScrollableHeight/2); 

Sin embargo, escribir esto en el constructor antes o después de InitializeComponent() (o incluso en) no le dará el resultado que desea. (Porque aunque los componentes se hayan inicializado en esta etapa, el archivo de imagen contenido no). En su lugar, debe adjuntar un nuevo controlador de eventos ImageOpened a Image y escribir el comando allí .

ImageOpened EventHandler

Cuestiones relacionadas