在form2中获取用户输入并在c#中以form1显示数据

在此处输入图像描述在此处输入图像描述

在左图中,有搜索按钮。 点击时,它会弹出第二个表格(右图)。

在搜索表单(form2)上输入关键字时,数据将显示在form1上。 如何将form2中的用户输入的单词传递给form1?

这是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); } } 

这是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. } 

谁能帮我这个? 谢谢

===编辑===

我指的是这个链接来解决这个问题。 有两种方法,我使用第二种方法,它的工作完美。 我为此大声喊叫。 谢谢你的博客老板。

我还发现,为了查看数据,我需要在TextBox中查看它而不是ListBox。 我之前做的是我试图在ListBox中查看它。 我不确定为什么,但就是这样。 无论如何,这个问题解决了! 再次感谢那些帮助我完成这个主题的人。 我很感激。

例如,您可以简单地使用属性:

窗体2:

 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 } 

Form1中:

 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 .... 

在Form2上创建一个属性(或多个属性),公开所需控件的值。 因此,如果您想要搜索词,请执行以下操作:

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

另外,在旁注上; 不要忘记检查用户是否确实按了搜索。

现在的方式,当用户用x关闭表单时,它也会搜索。 这对用户来说似乎不合逻辑。

在Form2 ModalResult.OK上创建按钮并按照以下方式执行:

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

您可以在Form1类中签署Form2按钮单击事件:

 // 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... } 

然而,@ BigYellowCactus和@Gerald Versluis提出的答案更简单,更可取。

顺便说一下,不要使用默认按钮名称。 将来很难理解他们的目的。 您可以重命名form1form1中的 button5showFindWindowButtonform2form2中的 button1startSearchButton

我几天前在我的项目中使用了一个简单的解决方案。 我建议使用内部类表单。 创建一个普通的表单来获取seach字符串(就像你一样),例如fSearch,然后使用ShowModal来显示它而不是Show()。 这是一个例子(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(); } } }