2009-04-04 4 views
7

In dem form.cs Datei Ich habe zwei Tasten, ein Memo und eine timer.My Frage ist: Wie kann ich den Timer oder das Memo aus einer anderen cs-Datei?Wie für den Zugriff auf Formularobjekte aus einer anderen cs-Datei in C#

Ich habe versucht, die Objekte öffentlich zu machen, aber es hat nicht funktioniert, geben Sie mir bitte eine Quelle oder ein Projekt, so kann ich sehen, wo ich mich nicht irre.

Danke!

+0

Ist die andere cs-Datei im selben Projekt? –

Antwort

15

Wählen Sie Ihre Schaltfläche in Designer, gehen Sie es Eigenschaften und Wandel „Modifier“ Eigentum von privat zu öffentlich.

Dann können Sie den Zugriff auf sie von einer anderen Klasse zu bekommen, so etwas wie dieses:

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

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

Hinweis: es ist nur ein Beispiel und auf keinen Fall ein Muster für gutes Design :-)

+1

werfen neue StackOverflowException(); ;) –

+0

http://pastebin.com/m183c1bcf Es wirft einen Fehler, ich habe markiert, wo der Fehler platziert ist. Funktioniert nicht. –

+0

Sie haben Ihre Antwort bearbeitet, ich habe das bereits versucht. Wenn ich versuche, "Form1.MyButton" zu schreiben, erkennt es das nicht. –

6

Ich mache mir Sorgen, wenn Ich höre jemanden über "eine andere .cs-Datei" oder "eine andere .vb-Datei" sprechen. Es deutet oft (wenn auch nicht immer) auf ein mangelndes Verständnis der Programmierung, zumindest der OO-Programmierung, hin. Was ist in die Dateien? Eine Klasse? Zwei?

Sie versuchen nicht, auf diese Dinge von einer anderen Datei zuzugreifen, Sie versuchen, auf sie von einer Methode einer Klasse oder möglicherweise eines Moduls in VB zuzugreifen.

Die Antwort auf Ihre Frage nach der Natur der Klasse abhängen und Verfahren, von dem Sie diese Dinge zugreifen möchten, und der Grund, warum Sie sie zugreifen möchten.

Sobald Sie Ihre Frage bearbeiten diese Informationen enthalten, die Antworten, die Sie erhalten werden Ihnen wahrscheinlich, dass Sie nicht werden, sollten mich diese privaten Teile der Form in anderen Klassen als die Formularklasse zugreifen.

+3

+1 Ich vermute, das Problem geht viel tiefer als nur die Sichtbarkeit der Eigenschaften. – tvanfosson

1

Obwohl ich mit John Saunders, eine Sache einig können Sie falsch machen, vorausgesetzt, dass Sie alles zugänglich durch öffentliche Modifikatoren haben, ist, dass Sie nicht die Instanz dieser Form haben.

Zum Beispiel, das ist, wie Sie es tun würde:

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

Ich gehe davon aus, dass Sie darauf zugreifen, wie es ist statisch, wie dies kann versuchen:

string theButtonTextIAmLookingFor = Form1.MyButton.Text; 

nur etwas, das Sie könnte überprüfen wollen.

5

Es ist Form-Objekt bereits in Program.cs instanziert zu lösen, außer es habe keinen Bezug.Mit einfacher Bearbeitung können Sie drehen

Application.Run(new Form1()); 

zu

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

erklärt es wie

public static Form1 formInstance; 

und verwenden

Program.formInstance.MyFunction(params); 
+0

Ich mag diese Methode, es macht die Top-Level-Form immer verfügbar. Ich hatte Probleme mit ActiveForm, das auf das falsche Formular abzielte (Falsch aus Sicht meines Codes, richtig gemäß aller herkömmlichen Logik.) – Khainestar

Verwandte Themen