pasar valores entre formularios (formas de ganar)

Comportamiento extraño al pasar valores hacia y desde la segunda forma.

ParameterForm pf = new ParameterForm(testString); 

trabajos

 ParameterForm pf = new ParameterForm(); pf.testString="test"; 

does not (testString definido como cadena pública)

tal vez me estoy perdiendo algo? De todos modos, me gustaría hacer que la segunda variante funcione correctamente, por ahora, devuelve un error de referencia de objeto nulo.

Gracias por la ayuda.

Publicando más código aquí:

vocación

 Button ParametersButton = new Button(); ParametersButton.Click += delegate { ParameterForm pf = new ParameterForm(doc.GetElementById(ParametersButton.Tag.ToString())); pf.ShowDialog(this); pf.test = "test"; pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit); }; 

definición y uso

  public partial class ParameterForm : Form { public string test; public XmlElement node; public delegate void ParameterSubmitResult(object sender, XmlElement e); public event ParameterSubmitResult Submit; public void SubmitButton_Click(object sender, EventArgs e) { Submit(this,this.node); Debug.WriteLine(test); } } 

resultado: Enviar – prueba de referencia de objeto nulo – referencia de objeto nulo

  • pf.ShowDialog(this); es una llamada de locking, entonces pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit); nunca se alcanza: cambie el orden.

  • Submit(this,this.node); arroja una referencia de objeto nulo porque no se le asigna ningún evento (ver arriba). En general, siempre debe verificar primero: if (Submit != null) Submit(this,this.node);

  • Debería cambiar “ pf.ShowDialog (this); to pf.Mostrar (esto); `para que su formulario principal no esté deshabilitado mientras su cuadro de diálogo esté abierto, si eso es lo que desea, o use el modelo a continuación (típico para cuadros de diálogo).


No estoy seguro de qué se supone que pf_Submit debe hacer, por lo que esta podría no ser la mejor manera de hacerlo en su aplicación, pero es cómo funcionan las preguntas generales “Proceed? Yes / No”.

 Button ParametersButton = new Button(); ParametersButton.Click += delegate { ParameterForm pf = new ParameterForm(testString); pf.ShowDialog(this); // Blocks until user submits // Do whatever pf_Submit did here. }; public partial class ParameterForm : Form { public string test; // Generally, encapsulate these public XmlElement node; // in properties public void SubmitButton_Click(object sender, EventArgs e) { Debug.WriteLine(test); this.Close(); // Returns from ShowDialog() } } 

Cuando quiera usar su segunda variante, debe usar un método getString (), donde puede poner, por ejemplo, “testString”. La forma en que lo escribió, “testString” debería ser un método (y obtuvo corchetes).

EDITAR (un poco más preciso):

Podrías escribir:

 pf.getString(testString); 

, si “pf” es una instancia de su propia clase, de lo contrario, debe mirar hacia arriba, ya sea que pueda recuperar una cadena en esta clase.

la cosa estaba en orden de línea 🙂

 pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit); 

y

 pf.Test = "test"; 

debería haber sido establecido antes

  pf.ShowDialog(this); 

mi error al señalar ese parámetro se puede pasar después de que se mostró el segundo formulario

THXX por respuestas