Application.OpenForms["formname"];

¿Hay alguna otra forma de acceder a un formulario abierto? Mi aplicación no ve este formulario aunque está abierto. No sé por qué.

2
nrtn93 27 ene. 2016 a las 11:24

4 respuestas

La mejor respuesta

No es realmente necesario un nombre para obtener una forma abierta. Puede obtener el formulario que desee por índice:

Form frm = Application.OpenForms[0] //Will get the main form
Form frm = Application.OpenForms[1] //Will get the first child

Los formularios de la colección OpenForms se ordenan de la misma manera en que los crea

De lo contrario, una alternativa es guardar una referencia al formulario y luego acceder a él por esta referencia.

//Where you want to save the reference:
Form theForm;
//Where you create the form:
myClass.theForm = new MyForm();
//Where you want to get that form:
MessageBox.Show(myClass.theForm.Caption);

(myClass es la clase que contendrá su referencia al formulario, suponiendo que acceda a él desde diferentes clases)

(Además, vea si esto le afecta: Application.OpenForms.Count = 0 siempre)

2
Community 23 may. 2017 a las 12:31

Para acceder al formulario usando esta propiedad, su form debe tener un Name.

Recuerde que no es el nombre de la instancia ni el texto del formulario:

  Form1 f1 = new Form1();    //not "f1" is the "Name"  
  f1.Text = "it is title of the form"; //neither "Text" is the "Name"
  f1.Name= "its the name"; //it is the "Name"

Muestra:

frm_myform form1 = new frm_myform(); 
frm_myform.Name = "form1";
0
Shaharyar 27 ene. 2016 a las 08:44

Primero debe crear una instancia de Form. después de eso, tienes acceso a él:

Form1 formname = new Form1();
Application.Run(formname);

// access to form by formname.yourproperty
1
M. Schena 27 ene. 2016 a las 08:34

Le recomiendo que primero depure su código para verificar cuál es el nombre real de Form que desea cargar:

foreach (Form form in Application.OpenForms) {
    string name = form.Name; //check out this name!!
    //print, or anything else will do, you only want to get the name
    //note that you should be able to get any form as long as you get its name correct
}

Y luego, una vez que sepa qué está mal con su código, simplemente haga:

Form form = Application.OpenForms[name]; //use the same name as whatever is available according to your debug

Para obtener su form.

Para obtener más información sobre los posibles errores, consulte publicación de Hans Passant

2
Community 23 may. 2017 a las 11:59