2012-05-24 31 views
10

Quiero acceder a las variables de un formulario desde otro formulario. Al hacer clic en un botón dentro de mi formulario principal, quiero establecer mi formulario principal como principal y luego mostrar otro formulario (formulario hijo) en el que accederé a las variables del formulario principal. Mi manejador de clics es el siguiente:Establecer formulario como excepción de lanzamiento principal "No se puede agregar control de nivel superior a un control"

private void btnSystem_Click(object sender, EventArgs e) 
{ 
    Form_EnterPassword EP = new Form_EnterPassword(); 
    EP.Parent = this;  //error: Top-level control cannot be added to a control 
    EP.ShowDialog(); 
} 

Compila bien sin ningún error. Sin embargo, cuando ejecuto el formulario principal y hago clic en el botón Sistema, me lanza una excepción. Hago algo similar en otro código (no en el mío) con el mismo clic de botón, y no encuentro ningún error (solo con establecer el formulario principal como principal).

¿Qué estoy haciendo mal? ¿Hay algo en mi código principal que cause esto?

+0

He leído alrededor y no he encontrado nada que ayude. hay códigos similares, que tienen la misma declaración de configuración principal. – CaTx

+0

la excepción se lanza a la derecha cuando configuro Parent. – CaTx

Respuesta

16

La mejor manera sería usar EP.ShowDialog(this) y luego usar la propiedad Owner.

+0

Cambio a .ParentForm; me arroja este error: Propiedad o indexador 'System.Windows.Forms.ContainerControl.ParentForm' no se puede asignar a - es de solo lectura – CaTx

+3

Cierto. Olvídate de los padres. Solo usa 'Owner'. –

+0

Lo intentaré. Gracias. – CaTx

10

Necesita que la propiedad EP.TopLevel se configure como falsa. Le permitirá configurar un padre para ello.

Further reading.

En caso de que sólo desea tener acceso a las variables y los controles de otra forma, entonces tal vez pueda llegar a él de otra manera, no Trough una relación padre.

+1

EP.TopLevel = false -> no ayuda. – CaTx

+0

gracias me ayudó a mostrar la forma como control en otra forma – oleksa

+0

Creo que esto debería haber sido aceptado como la respuesta correcta. Hizo el trabajo por mí. Gracias ;) – Javid

1

OK, al parecer, la manera de hacerlo es llamar

Form_Child.ShowDialog(this) 

y luego me puede llamar

FromParent_aVariable = ((Form_Parent)this.Owner).aVariable; 

o si defino AVariable en las propiedades de espacio de nombres a continuación

FromParent_aVariable = NameSpace.Properties.Settings.Default.aVariable; 

hay dos formas.

-1

Al escribir de esta manera, se hizo que el diálogo se muestre en el centro del formulario principal.

Form_Child.StartPosition = FormStartPosition.CenterParent; 
    Form_Child.ShowDialog(this); 
Cuestiones relacionadas