0

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

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

在搜索表单(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 中查看它。我不知道为什么,但就是这样。无论如何,这个问题解决了!再次感谢那些在这个话题上帮助我的人。我很感激。

4

4 回答 4

2

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

表格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
    }

表格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

    ....
于 2012-08-03T07:23:10.243 回答
2

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

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

另外,在旁注中;不要忘记检查用户是否真的按搜索。

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

在您的 Form2 ModalResult.OK 上制作按钮并这样做:

if (form2.ShowDialog() == ModalResult.OK)
{
  // Do your thing
}
于 2012-08-03T07:23:36.187 回答
1

您可以在 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 提出的答案更简单,更可取。

By the way, do not use default button names. It'll be hard to understand their purposes in future. You can rename form1.button5 in form1.showFindWindowButton and form2.button1 in form2.startSearchButton.

于 2012-08-03T07:40:55.080 回答
0

几天前,我在我的项目中使用了一个简单的解决方案。我建议使用内部类形式。创建一个普通表单来获取搜索字符串(就像你做的那样),例如 fSearch,然后使用 ShowModal 来显示它而不是 Show()。这是一个示例(伪 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();
      }
  }
}
于 2012-08-03T07:37:53.007 回答