得到在窗口2和显示数据的用户输入在Form1在c#(get user input in form2

2019-06-26 17:22发布

在左图中,有搜索按钮。 点击时,会弹出第二种形式(右图)。

输入搜索窗体(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.
        }

谁能帮我这个? 谢谢

===编辑===

我指的是这个链接来解决这个问题。 有两种方法,我现在用的是第二种方法,它完美的作品。 我哭出声来此。 谢谢你的博客的主人。

我还发现,为了查看数据,我需要在文本框和列表框不进行查看。 我做了什么之前我尝试在列表框中查看此。 我不知道为什么,但就是这样。 无论如何,这个问题解决! 再次为那些谁帮我看看这个话题的感谢。 我很感激。

Answer 1:

你可以,例如,只需使用一个属性:

窗体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

    ....


Answer 2:

创建Form 2上的属性(或属性)使您需要的控件的值。 所以,如果你想搜索词不喜欢它:

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

此外,在一个侧面说明; 不要忘记检查,如果用户实际上没有按搜索。

你现在的样子,当用户关闭与X也将搜索形式。 这似乎不符合逻辑的用户。

让你的窗体2 ModalResult.OK按钮,像这样做:

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


Answer 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上button5Form1。 showFindWindowButton窗口2。 BUTTON1窗体2。 startSearchButton。



Answer 4:

我用一个简单的解决方案,我的项目,前几天。 我建议使用内部类的形式。 创建一个普通的形式来获取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();
      }
  }
}


文章来源: get user input in form2 and display data in form1 in c#
标签: c# forms