4

別のフォームからメソッドを呼び出そうとしています。私の試み:

public partial class newLedPopUp : Form
{
    Form1 back = new Form1();
    back.output();
    Close();
}

public partial class Form1 : Form
{
    newLedPopUp popup = new newLedPopUp();

    public void output()
    {
        button3_Click(null, null);
    }
}

誰か助けてくれませんか?エラーが本当に見つからず、非常に長い間探していました。

4

2 に答える 2

36

新しいフォームのインスタンスを作成する代わりに、すでに開いているフォームのインスタンスが必要であり、そこからメソッドを呼び出す必要があります。あなたが試すことができます:

if (System.Windows.Forms.Application.OpenForms["yourForm"] != null)
    {
        (System.Windows.Forms.Application.OpenForms["yourForm"] as Form1).Output();
    }

さらに、イベントのコードを別のメソッドに配置し、ボタンクリックイベントまたはパブリック出力メソッドに対してそのメソッドを呼び出すことで、メソッドbutton3_Click(null,null)内の呼び出しを置き換えることができます。Output

于 2012-10-15T07:09:06.370 に答える
2

Form1メソッドを呼び出した直後に閉じていますoutput。したがって、そこにはビジネス関連の、またはデータアクセスロジックがあると思います。button3_Clickイベントハンドラーで実行されるコードをオブジェクトを分離するために移動してみてください

public class Foo
{
    public void Output()
    {
       // move here button3_Click code
    }
}

次に、Fooを作成し、両方のフォームに渡します(または、依存性注入なしでフォーム内でインスタンス化できます)

Foo foo = new Foo();
Form1 form1 = new Form1(foo);
LedPopUp form2 = new LedPopUp(foo);

そして、次のように使用します。

public partial class Form1 : Form
{
     private Foo _foo;
     // without dependency injection: private Foo _foo = new Foo();         

     public Form1(Foo foo)
     {
         _foo = foo;
     }

     protected void button3_Click(object sender, EventArgs e)
     {
         _foo.Output();
     }
}
于 2012-10-15T07:28:04.853 に答える