2016-07-21 5 views
-2

VSの使用このクラスXI内のメインフォーム(ソフトウェアが実行されたときに最初に開かれたもの)とクラスXは、アクセスする必要があるメソッドYを別のフォームから作成しましたクラスを静的にすることはできませんし、XY()を試してみるとクラスのインスタンスを参照する必要があることは明らかです。とにかく、このメインフォームのインスタンスへの参照をもう一度インスタンス化しないでください。プログラムが実行されたときなどにインスタンス化されたと思いますか?別のクラスからのメインフォームメソッドへのアクセス

+0

2番目のフォームにデリゲートを入れて、クラス 'X' –

+0

内の別のフォームclass' 'のインスタンスを作成しているとし、メインフォームのメソッドへの参照を渡します。次に、2番目の形式で呼び出すことができます。 – DeanOC

+0

nope、@ un-luckyではない –

答えて

0

FormXをという名前のメソッドがあり、AnotherClassからアクセスしたいとします。あなたがイベントを定義ウェア上記のコードを使用して子クラスのclass FormXため

定義、メインフォーム

class FormX 
{ 
    public delegate void refreshDelegate(); 
    public event refreshDelegate refreshEvent; 
    AnotherClass AnotherClassInstance = new AnotherClass(); 
    public FormX() 
    { 
     refreshEvent += new refreshDelegate(MethodY); 
     AnotherClassInstance.AccessParentMethod = refreshEvent; 
    } 

    public void MethodY() 
    { 

     // do something 
    } 
} 

定義AnotherClass

public class AnotherClass 
{ 
    public Delegate AccessParentMethod; 
    public void ClassMethod() 
    { 
    // Access form method 
     AccessParentMethod.DynamicInvoke(); 
    } 
} 

refreshEvent:そのためにあなたは、このように使用することができますrefreshDelegateのタイプであり、インスタンスを介してAnotherClassのAccessParentMethodという代理人に割り当てられます。したがって、AccessParentMethod.DynamicInvoke()を呼び出すと、実際にはメインクラスのMethodY()が呼び出されます。子オブジェクトのいくつかの引数をメインクラスに渡す場合は、デリゲート定義で次のように変更します。

public delegate void refreshDelegate(object SomeValue); 
public event refreshDelegate refreshEvent; 
// Changes in MethodY 
public void MethodY(object SomeValue) 
{ 
    // do something 
} 

が続いて次のコードを使用 MethodYを呼び出すことができます。

AccessParentMethod.DynamicInvoke("This is the argument"); 
+0

落ち着きを楽しんでください;隠れている敵ではない、理由を明らかにする。投稿を改善するのに役立つかもしれない –

+0

あなたの投稿は私にはうまく見えます。私はあなたが低品質の質問に答えるために下降したと推測しています。 – DeanOC

0

このようなことができます。

Form f = Application.OpenForms["YourFormName"]; 

次に、フォームタイプにfをキャストして、すべてのパブリックメソッドとプロパティにアクセスできます。

+0

申し訳ありませんが、これはC#の方法ですが、VBでも同様に行うことができます。 – Bikswan

+0

OPは、とにかく 'c#'を望んでいるので、すべてが良いです。 – MickyD

+0

うん。質問は、VSはフォームを作成するために使用されていることを示しています。とにかく感謝します。 :) – Bikswan

関連する問題