2016-04-09 11 views
0

これは私の最初の質問ですが、おそらく非常に問題はありますが、それは私にかなりの時間を与えてくれました。私は簡単な例を使って説明しています。メソッドを呼び出すボタンイベントはpublic intには影響しません

コンソールアプリケーションでは、public int 'x'を0に設定し、 'test'メソッドを1に変更するメソッドがあります。 'test'がMainで呼び出されると、Xの値は1になります期待される)。

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

(これは私が理解していないものです)、Windowsフォームアプリケーションで同じ「試験」メソッドを呼び出すためにbutton_Clickイベントを使用して、「X」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); 
    } 
} 

要約すると、ボタンがクリックされたときに 'テスト'が呼び出され、 'x'の値が1に変更されてしまうことがあります。

ありがとうございます!あなたがその行を削除しForm1 form = new Form1();

で作成したフォームのために何が起こっているので

答えて

0

、それが動作するはずです、唯一test()を呼び出して、もう一度試してください。

+0

ありがとうございました! – Sammmm

1

Form1の2つの別々のインスタンスを作成しました。 2番目のインスタンスでtest()メソッドを呼び出すと、最初のインスタンスのxの値には影響しません。

ボタンのクリックイベントを変更して、新しいForm1を作成しないようにします。

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

ありがとうございました。それがパズルの最後の部分でした。私のプログラムの最終作品! – Sammmm

+0

@Sammmmようこそ。 –

関連する問題