2009-07-13 5 views
0

Ich werde Ihnen zuerst sagen, was ich versuche, und dann, wie ich es versuche. Wenn es einen besseren Weg gibt, lass es mich wissen.Ändern eines nicht statischen Objekts von einer statischen Methode

ich mit zwei Formen arbeite - lässt sie form_main anrufen und form_preferences

Wenn die form_preferences Form nach oben, ich form_main wollen, bis eine Taste (Speichertaste) deaktiviert sein auf den form_preferences geklickt wird.

Also hier ist, was ich tue: Knopf geklickt wird in form_main

form_preferences frm_p = new form_preferences(); 
frm_p.Visible = true; 
this.enabled = false; 

// so weit, so gut

Wenn ich auf form_preferences speichern Hit nennt es eine öffentliche statische Methode in form_main die muss das Formular erneut aktivieren. Leider kann ich das nicht direkt machen, weil es eine statische Methode ist.

Ich versuchte, eine neue Instanz des Formulars zu erstellen, aber dann musste ich die neue Instanz erstellen und die ursprüngliche Instanz zerstören, die wie eine große Verschwendung und ineffizient erscheint. Gibt es einen besseren Weg, dies zu tun?

+0

Ich verstehe nicht, warum haben Sie eine statische Methode erstellt, anstatt eine Instanz zu nennen? – cdm9002

Antwort

1

Ändern Sie die form_main-Methode in eine Instanzmethode anstelle von static. Übergeben Sie die Instanz von form_main an Ihr Unterformular, wenn Sie es erstellen, damit es einen Verweis behält.

+0

Ich habe das versucht, aber die frm_main.Enabled = true tut nichts auf der main_form, die ich übergeben habe, als ich dieses zweite Formular erstellt habe. öffentliche partielle Klasse frmsettings: Formular { Formular frm_main; public frmsettings (Formular frmparent) { InitializeComponent(); frm_main = frmparent; } private void cmdsave_settings_Click (object sender, EventArgs e) { frm_main.Enabled = true; this.Close(); } –

+0

Wusste nicht, dass Formate nicht halten. Grundsätzlich in meiner öffentlichen Klasse habe ich eine öffentliche sub_form (Form frmparent) {}, die eine globale Variable in der Klasse gleich der, die übergeben wurde. Später wenn es aufgerufen wird scheint es keine Auswirkungen auf die Eltern haben bilden. Fehle ich hier etwas? –

+0

Okay so frm_main.Enabled = true; funktioniert nicht, aber frm_main.Close(); tut aus irgendeinem Grund .... –

0

Wenn es nur eine Kopie Ihres Hauptformulars geben würde, dann machen Sie Ihr Formular als Singleton oder benutzen Sie eine statische Referenz in Ihrem Programm, um von einer statischen Methode darauf zuzugreifen.

In Ihrem Hauptverfahren haben die folgenden ...

public static class Program { 

    public static YourFrom form = null; 

    public static void Main(string args[]) { 
    Program.form = new YourFrom(); 
    Application.Run(form); 
    } 
} 

Und wenn Sie das Formular-Objekt in Ihrer Klasse zugreifen müssen, um das Program.form-Objekt verwenden, darauf zuzugreifen.