【问题标题】:get user input in form2 and display data in form1 in c#在 c# 中获取 form2 中的用户输入并在 form1 中显示数据
【发布时间】:2012-08-07 11:54:09
【问题描述】:

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

在搜索表单(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.
        }

谁能帮我解决这个问题?谢谢

===编辑===

我指的是this link 来解决这个问题。有两种方法,我使用的是第二种方法,效果很好。我为此大声哭泣。谢谢博主。

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

【问题讨论】:

    标签: c# forms


    【解决方案1】:

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

    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
        }
    

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

    【讨论】:

      【解决方案2】:

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

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

      另外,顺便说一句;不要忘记检查用户是否真的按了搜索。

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

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

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

      【讨论】:

      • 我和你说的完全一样,但它说 ModalResult 在当前上下文中不存在。
      • 抱歉,应该说是DialogResult
      【解决方案3】:

      您可以在 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.showFindWindowButtonform2 中重命名 form1.button5button1form2 中。startSearchButton

      【讨论】:

        【解决方案4】:

        几天前,我在我的项目中使用了一个简单的解决方案。 我建议使用内部类形式。 创建一个普通表单来获取搜索字符串(就像你做的那样),例如 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();
              }
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多