2009-04-04 5 views
7

form.csファイルにはメモとタイマーの2つのボタンがあります。私の質問は次のとおりです。別のcsファイルからタイマーやメモにアクセスするにはどうすればいいですか?C言語で別のcsファイルからフォームオブジェクトにアクセスする方法

私はオブジェクトをパブリックにしようとしましたが、動作しませんでした。ソースまたはプロジェクトを与えてください。私は誤っている箇所を確認できます。

ありがとうございます!

+0

を使用

Application.Run(formInstance = new Form1()); 

Application.Run(new Form1()); 

を回すことができ、同じプロジェクト内の他のCSファイルですか? –

答えて

15

デザイナーであなたのボタンを選択し、そのプロパティに移動し、 "Modifiers"プロパティをPrivateからPublicに変更します。

次に、あなたは、このように、何かを別のクラスからのそれへのアクセスを取得することができます:

public static class Test 
{ 
    public static void DisalbeMyButton() 
    { 
     var form = Form.ActiveForm as Form1; 

     if (form != null) 
     { 
      form.MyButton.Enabled = false; 
     } 
    } 
} 

注:それは間違いなく、私はいつでも心配

+1

新しいStackOverflowException()をスローします。 ;) –

+0

http://pastebin.com/m183c1bcf エラーが発生した場合、エラーが発生した場所をマークしました。動作しません。 –

+0

あなたはあなたの答えを編集しました、私は試みました。私は "Form1.MyButton"を書き込もうとすると、それはそれを認識しません。 –

6

:-)良いデザインのためのパターンだけではなく例だと私は誰かが "別の.csファイル"または "別の.vbファイル"について話しているのを聞いています。多くの場合(必ずしもそうではないが)、少なくともOOプログラミングのプログラミングの理解の欠如を示している。ファイルにありますか? 1つのクラス?二?

他のファイルからこれらのオブジェクトにアクセスしようとしていない場合は、クラスのメソッドから、または可能であればVBのモジュールからアクセスしようとしています。

あなたの質問に対する答えは、あなたがこれらのものにアクセスしようとしているクラスとメソッドの性質と、それらにアクセスする理由によって異なります。

この情報を含めるように質問を編集すると、フォームクラス自体以外のクラスでフォームのこれらの非公開部分にアクセスすべきではないという回答が表示されます。

+3

+1私は問題が単にプロパティの可視性よりも深くなると思う。 – tvanfosson

1

私はJohn Saundersに同意しますが、あなたが間違っているかもしれない1つのことは、あなたが公開修飾子ですべてのものにアクセスできると仮定すると、そのフォームのインスタンスを持たないということです。例えば、これは、あなたがそれを行うだろうか

されています:

Form1 myForm = new Form1; 
string theButtonTextIAmLookingFor = myForm.MyButton.Text; 

私はあなたがこのように、それは静的だと同じようにアクセスしようとすることができると仮定しています:

string theButtonTextIAmLookingFor = Form1.MyButton.Text; 

だけで何かをあなたがチェックしたいかもしれません。

5

すでにProgram.csの中でインスタンス化Formオブジェクトは、それを除いて、あり参照がない。簡単な編集を使用すると、

public static Form1 formInstance; 

ようにそれを宣言し、

Program.formInstance.MyFunction(params); 
+0

私はこの方法が気に入っており、トップレベルのフォームを常に利用可能にしています。私は間違ったフォームをターゲットにしているActiveFormに問題がありました(私のコードの観点からは間違っています、すべての従来のロジックに従ってください)。 – Khainestar

関連する問題