Pasando variable entre winforms

Tengo un problema relacionado con los delegates en una aplicación Windows.Forms.

Hay dos formas:

  1. la forma principal, que tiene un botón llamado “Configuración”.

  2. la forma “configuración”, esta es la forma “hija”.

Cuando hago clic en el botón “Configuración” en el formulario principal, abre una instancia del formulario Configuración.

Mi problema es que necesito pasar una variable al formulario Configuración, cuando lo abro. Para que la nueva forma muestre el texto variable. No sé cómo recuperar la información en el formulario “Configuración” del niño. Hice esto siguiendo un tutorial en línea y no pude entender en el tutorial cómo leer la información en el formulario de destino.

Esto es lo que he hecho hasta ahora, el código en la forma principal:

public partial class MainForm : Form { ///  /// delegate to send data between forms ///  public delegate void PageInfoHandler(object sender, PageInfoEventArgs e); ///  /// event of the delegate ///  public event PageInfoHandler PageInfoRetrieved; //other stuff, events blabla private void toolStripBtnSettings_Click(object sender, EventArgs e) { PageInfoEventArgs args = new PageInfoEventArgs(SomeString); this.OnPageInfoRetrieved(args); SettingsForm settingsForm = new SettingsForm(); settingsForm.ShowDialog(); } private void OnPageInfoRetrieved(PageInfoEventArgs args) { if (PageInfoRetrieved != null) PageInfoRetrieved(this, args); } } 

Pase la información que desee al constructor del formulario de Configuración y proporcione los métodos de acceso para las cosas que necesite de allí.

 public class SettingsForm : WinForm { private string m_Data; private int m_nExample = 0; // ctor public SettingsForm(string _data) { m_Data = data; // you can now use this in SettingsForm } // eo ctor public int Example {get{return(m_nExample);} } } // eo class SettingsForm 

En el “ejemplo” anterior, puede construir un SettingForm con una cadena y obtener un entero que puede usar. En tu código:

 private void toolStripBtnSettings_Click(object sender, EventArgs e) { PageInfoEventArgs args = new PageInfoEventArgs(SomeString); this.OnPageInfoRetrieved(args); SettingsForm settingsForm = new SettingsForm("some data to pass"); settingsForm.ShowDialog(); int result = settingsForm.Example; // retrieve integer that SettingsForm used } 

El formulario Setttings es una clase. Ahora es tuyo y puedes hacer lo que quieras con él. Así que agrega un parámetro (o el número que quieras) a su constructor. Luego, en su MainForm llame a SettingsForm (lo que sea) y ya está todo listo.

Sugeriría agregar una propiedad a SettingsForm.

Entonces, llámalo así:

 SettingsForm settingsForm = new SettingsForm(); settingform.myProperty = myPropertyvalue; settingsForm.ShowDialog(); 

¿Por qué no agrega un constructor a su formulario de configuración que toma los parámetros y pasa los datos que necesita allí?

Puede crear un constructor parametrizado para su formulario de configuración que acepte el texto y lo configure en una propiedad en forma de

 public partial class SettingsForm : Form { public string DisplayText {get;set;} public SettingsForm(string text) { DisplayText = text; } } 

entonces, acaba de inicializar la configuración de esta manera (desde su forma principal)

 var settingsForm = new SettingsForm("my init text"); 

su formulario de configuración se inicializará correctamente y tendrá el texto deseado en la propiedad DisplayText listo para usar