![](https://www.manongdao.com/static/images/pcload.jpg)
![](https://www.manongdao.com/static/images/pcload.jpg)
在左图中,有搜索按钮。 点击时,会弹出第二种形式(右图)。
输入搜索窗体(Form)的关键字时,该数据将出现在form1中。 如何通过字由用户在窗口2到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);
}
}
这是窗口2的代码。
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("Please enter keyword to search");
}
else
{
//send data input to form1.
}
谁能帮我这个? 谢谢
===编辑===
我指的是这个链接来解决这个问题。 有两种方法,我现在用的是第二种方法,它完美的作品。 我哭出声来此。 谢谢你的博客的主人。
我还发现,为了查看数据,我需要在文本框和列表框不进行查看。 我做了什么之前我尝试在列表框中查看此。 我不知道为什么,但就是这样。 无论如何,这个问题解决! 再次为那些谁帮我看看这个话题的感谢。 我很感激。
你可以,例如,只需使用一个属性:
窗体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
....
创建Form 2上的属性(或属性)使您需要的控件的值。 所以,如果你想搜索词不喜欢它:
public string SearchTerm
{
get { return this.textBox1.Text; }
}
此外,在一个侧面说明; 不要忘记检查,如果用户实际上没有按搜索。
你现在的样子,当用户关闭与X也将搜索形式。 这似乎不符合逻辑的用户。
让你的窗体2 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提出的答案是更简单,更理想的。
顺便说一句,不要使用默认的按钮名称。 这将是很难理解在未来他们的目的。 您可以重命名Form1上 。 button5在Form1。 showFindWindowButton和窗口2。 BUTTON1在窗体2。 startSearchButton。
我用一个简单的解决方案,我的项目,前几天。 我建议使用内部类的形式。 创建一个普通的形式来获取SEACH字符串(就像你一样),例如fSearch,然后使用的ShowModal显示,而不是显示它()。 这里是一个例子(伪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();
}
}
}