0

プロジェクトに 2 つのフォームがあります。Form1 はメイン フォームです。そこには、Form2 を開くボタン、ListView、および URL を呼び出して URL から取得したデータを ListView にフィードするメソッドがあります。

Form2 には、URL のテキストボックスと「OK」ボタンがあります。

Form1 のボタンを押すと、Form2 が開きますが、問題ありません。Form2のテキストボックスにURLを入力して[OK]を押すと、Form1のメソッドにURLを渡すように管理するにはどうすればよいですか?

私が行った場合

Form1 form1 = new Form1();
form1.method();

明らかに Form1 の新しいインスタンスを開き、そこでメソッドを実行し、そこでリストボックスに入力しますが、元の Form1 には入力しません。

問題に対するさまざまな解決策をオンラインで見つけましたが、それらは複雑すぎるか、機能しませんでした。

既に持っている Form1 でメソッドを実際に実行し、正しいリストボックスに値をロードするようにするにはどうすればよいですか?

どうもありがとう

4

4 に答える 4

4

イベントを定義Form2し、URL が入力されたときに発生させます。

public class Form2 : Form
{
   public event EventHandler UrlEntered;

   private void ButtonOK_Click(object sender, EventArgs e)
   {
       if (UrlEntered != null)
           UrlEntered(this, EventArgs.Empty);
   }

   public string Url { get { return urlTextBox.Text; } }
}

Form1 でそのイベントをサブスクライブします。

Form2 form2 = new Form2()
form2.UrlEntered += Form2_UrlEntered;
form2.Show();

このイベントを処理します。

private void Form2_UrlEntered(object sender, EventArgs e)
{
   Form2 form2 = (Form2)sender;
   string url = form2.Url;
   // use it
}

EventHandler<UrlEnteredEventArgs>また、入力した URL をサブスクライバーに提供するカスタム イベント引数を使用して、タイプのイベントを定義することもできます。

于 2012-11-17T20:03:34.670 に答える
1

見てください:

//In Form1 opening Form2
Form2 frm = new Form2();
frm.Owner = this;
frm.Show();

//Example to call methods in FORM1 from FORM2
private void button1_Click(object sender, EventArgs e)
{
    Form1 frmParent = (Form1)this.Owner;
    frmParent.testeFunction();
    frmParent.InsertInGrid(textBox1.Text);
}

したがって、基本的に Form1 に 1 つの関数を作成して、Form2 から呼び出す (パラメーターを渡す) 必要があります。これが役立つことを願っています。

于 2013-09-18T00:59:33.207 に答える
0

結果へのアクセスを許可する Form2 のプロパティを定義します。

// In Form2
public string Url { get { return urlTextBox.Text; } }

Form1 で

var form2 = new Form2();
form2.ShowDialog(this);
string url = form2.Url;

注:メソッドが閉じられるまで待機しShow()ない限り。ShowDialog()form2

ShowDialog引数thisは、開くフォームの所有者です。にバインドform2form1、常に上に表示しform1ます。

于 2012-11-17T20:16:53.243 に答える
-1

newを呼び出しているため、新しいインスタンスが作成されます。

Application.OpenFormsをループして、フォーム名を確認できます。Form1 が見つかったら、そのパブリックメソッドを簡単に呼び出すことができます。

Form1(Application.OpenForms[0] as Form1).method();
于 2012-11-17T20:05:45.070 に答える