2016-04-09 23 views
0

Bu benim ilk sorum burada ve her ne kadar muhtemelen çok nooby olsa da, uzunca bir süre beni şaşırttı. Açıklamak için basitleştirilmiş bir örnek kullanıyorum.Çağrılar yöntemini çağırır, bu çağrı, kamu int'yi etkilemez

Konsol Uygulaması'nda, bir public int 'x' ve 0'a ayarlayan bir 'test' setim var. Main'da 'test' denildiğinde, X'in değeri artık 1'dir (as beklenen). Bir Windows Form uygulaması aynı 'test' yöntemi çağırmak için bir Button_Click olay kullanırken

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(); 
    } 
Ancak

(ve bu anlamıyorum budur), 'x' kalır 0 olarak:

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); 
    } 
} 

Özetlemek gerekirse, gerçekleşmek istediğim şey, 'klik' tıklandığında çağrılacak 'test' için 'x' değerinin 1 olarak değiştirilmesidir. Herkes bunun neden çalışmadığını açıklayabilir mi?

Teşekkürler! o duruşu çıkarın Form1 form = new Form1();

ile oluşturulan form için oluyor Çünkü

cevap

0

, çalışmalıdır, sadece test() arayıp tekrar deneyin.

+0

Açıklama için teşekkürler! – Sammmm

1

İki ayrı örnek Form1 oluşturdunuz. İkinci örnekte test() yöntemini çağırmak, ilk örnekte x değerini etkilemez.

Düğme tıklama etkinliğini değiştirin, böylece yeni bir Form1 oluşturmuyorsunuz.

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

Çok teşekkürler. Bu, bulmacanın son parçasıydı. Programım final çalışmaları! – Sammmm

+0

Hoşgeldiniz @Sammmm. –