0

ここに画像の説明を入力 ここに画像の説明を入力

左の写真には検索ボタンがあります。クリックすると、2 番目のフォーム (右の図) がポップアップします。

検索フォーム(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.
        }

誰でもこれで私を助けることができますか?ありがとうございました

===編集===

この問題を解決するためにこのリンクを参照しています。2 つの方法があり、私は 2 番目の方法を使用していますが、完全に機能します。私はこれのために大声で叫んでいます。ブログ主様、ありがとうございます。

また、データを表示するには、ListBox ではなく TextBox で表示する必要があることもわかりました。私が以前にしたことは、これを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 によって提案された回答は、より単純でより望ましいものです。

ちなみに、デフォルトのボタン名は使用しないでください。将来、彼らの目的を理解するのは難しいでしょう。form1の名前を変更できます。form1button5showFindWindowButtonform2 . form2button1startSearchButton .

于 2012-08-03T07:40:55.080 に答える
0

私は自分のプロジェクトと数日前に簡単なソリューションを使用しました。内部クラス形式を使用することをお勧めします。fSearchなどの検索文字列を取得するための通常のフォームを作成し、Show()の代わりに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();
      }
  }
}
于 2012-08-03T07:37:53.007 に答える