obtener la entrada del usuario en form2 y mostrar los datos en form1 en c #

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

En la imagen de la izquierda, hay un botón de búsqueda. cuando haga clic, se abrirá la segunda forma (imagen de la derecha).

al ingresar la palabra clave en el formulario de búsqueda (form2), los datos aparecerán en el formulario1. ¿Cómo pasar la palabra ingrese por usuario en form2 a form1?

Este es el código en form1.

private void button5_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); //open form2-search form //kene get data input dr form2 XmlDocument xml = new XmlDocument(); xml.Load("C:\\Users\\HDAdmin\\Documents\\SliceEngine\\SliceEngine\\bin\\Debug\\saya.xml"); XmlNodeList xnList = xml.SelectNodes("/Patient/Patient/Name"); foreach (XmlNode xn in xnList) { string name = xn.InnerText; listBox21.Items.Add(name); } } 

Este es el código en form2.

 private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("Please enter keyword to search"); } else { //send data input to form1. } 

¿Puede alguien ayudarme con esto? gracias

=== EDIT ===

Me refiero a este enlace para resolver este problema. Hay dos formas y estoy usando el segundo método y funciona perfectamente. Estoy llorando en voz alta por esto. Gracias al dueño del blogger.

También encontré que, para ver los datos, necesito verlos en TextBox y no en ListBox. Lo que hice antes es intentar ver esto en ListBox. No estoy seguro de por qué, pero eso es todo. De todos modos, este problema resuelve! Gracias de nuevo por los que me ayudan con este tema. estoy agradecido.

Puedes, por ejemplo, simplemente usar una propiedad:

Form2:

 public string UserText { get; set;} ... private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("Please enter keyword to search"); } else { UserText = textBox1.Text; // set the Text } 

Formulario 1:

 private void button5_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); //open form2-search form string text = from2.UserText; get the Text .... 

Cree una propiedad (o propiedades) en Form2 exponiendo los valores de los controles que desea. Así que si quieres el término de búsqueda hazlo como:

 public string SearchTerm { get { return this.textBox1.Text; } } 

También, en una nota lateral; No olvide verificar si el usuario realmente presionó buscar.

De la forma en que lo tiene ahora, cuando un usuario cierra el formulario con la x, también buscará. Eso no parece lógico para el usuario.

Haga el botón en su Form2 ModalResult.OK y hágalo así:

 if (form2.ShowDialog() == ModalResult.OK) { // Do your thing } 

Puede firmar el evento Form2 en el que se hizo clic en el botón en la clase Form1:

 // Form1's button5 clicked event handler. private void OnButton5Clicked(object sender, EventArgs e) { form2.button1.click += this.OnSearchButtonClicked; } // form2.button1 clicked event handler. // this method will rise when form2.button1 clicked. private void OnSearchButtonClicked(object sender, EventArgs e) { if (form2.textBox1.Text == "") { MessageBox.Show("Please enter keyword to search"); } else { // unsign from event!!! form2.button1.click -= this.OnSearchButtonClicked; // here you can use form2.textBox1.text string searchRequest = form2.textBox1.Text; } // your business-logic... } 

Sin embargo, las respuestas propuestas por @BigYellowCactus y @Gerald Versluis son más simples y preferibles.

Por cierto, no utilice nombres de botones predeterminados. Será difícil entender sus propósitos en el futuro. Puede cambiar el nombre de form1 . button5 en form1 . showFindWindowButton y form2 . button1 en form2 . startBuscarBotón

Utilicé una solución simple en mi proyecto y hace unos días. Recomiendo usar la forma de clase interna. cree una forma normal para obtener la cadena de búsqueda (como lo hizo), por ejemplo, fSearch, luego use ShowModal para mostrarla en lugar de Show (). Aquí hay un ejemplo (psuedo c #):

 class MainClass : form { String search = String.Empty; private void button5_Click(object sender, EventArgs e) { SearchString s = new SearchString(); s.ShowModal(); search = s.search; } . . class SearchString : Form { public String strString = String.Empty; private void btnOK_Click(object sender, EventArgs e) { this.strString = text1.text; this.close(); } } }