2016-04-09 5 views
0

Dies ist meine erste Frage hier, und obwohl es wahrscheinlich ein sehr nooby ist, hat es mich für eine ganze Weile ratlos. Ich verwende ein vereinfachtes Beispiel zur Erklärung.Button-Ereignis, das Methode aufruft hat keinen Einfluss auf öffentliche Int

In einer Konsolenanwendung habe ich ein public int 'x' auf 0 und eine Methode 'test' auf 1 gesetzt. Wenn 'test' in Main aufgerufen wird, ist der Wert von X jetzt 1 (als erwartet).

public int x = 0; 

    public void test() 
    { 
     x = 1; 
    } 

    static void Main(string[] args) 
    { 
     Program program = new Program(); 
     program.test(); 
     Console.WriteLine(program.x); 
     Console.ReadLine(); 
    } 

aber (und das ist das, was ich nicht verstehe), wenn ein Button_Click Ereignis mit dem gleichen ‚Test‘ Methode auf einem Windows Forms-Anwendung aufzurufen, ‚x‘ bleibt als 0:

public Form1() 
    { 
     InitializeComponent(); 
    } 

    public int x = 0; 

    public void test() 
    { 
     x = 1; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 form = new Form1(); 
     form.test(); 
     MessageBox.Show("" + x); 
    } 
} 

So zusammenzufassen, was ich geschehen möchte, ist für "Test" aufgerufen werden, wenn die Schaltfläche geklickt wird, ändern Sie den Wert von "X" auf 1. Kann jemand erklären, warum dies nicht funktioniert?

Danke!

Antwort

0

Da für die Form geschieht, die Sie mit Form1 form = new Form1(); erstellt

diese Zeile entfernen, rufen Sie nur test() und versuchen Sie es erneut, sollte es funktionieren.

+0

Danke für die Erklärung! – Sammmm

1

Sie haben zwei separate Instanzen von Form1 erstellt. Der Aufruf der Methode test() bei der zweiten Instanz hat keinen Einfluss auf den Wert x in erster Instanz.

Ändern Sie das Klickereignis der Schaltfläche, sodass Sie keine neue Form1 erstellen.

private void button1_Click(object sender, EventArgs e) 
{ 
    test(); // now it'll call test() on the current instance, and modify x as you expect 

    MessageBox.Show("" + x); 
} 
+0

Vielen Dank. Das war das letzte Puzzleteil. Mein Programmabschluß funktioniert! – Sammmm

+0

Gern geschehen @Sammmm. –

Verwandte Themen