2014-01-15 43 views
0
Form1 { 
     public int VAR; 
     public int PRTY_VAR 
     { 
     get { return VAR; } set { VAR= value; } 
     } 

} 

從窗口2
Form2 
    { 
     private void trackBar2_Scroll(object sender, EventArgs e) 
     { 
      // here, cant access property "PRTY_VAR" 
      Form1.PRTY_VAR= 1 + trackBar2.Value; 

     } 

    } 

着訪問PRTY_VAR。我需要改變VAR沒有deaclaring訪問變量像這樣MainForm.property,沒有實例化MainForm mf = new MainForm;

在窗體2 MainForm mf = new MainForm;

,因爲在聲明它不改變的MainForm的varible。 它只更改新創建的MainForm實例的變量(不是真正的MainForm。)

謝謝。 (新的Form1());我玩與Application.Run(新的Form1());在Program.cs中把它公開

回答

2

兩個選項:

  1. 傳遞給Form2,並從那裏獲得它的MainForm參考。
  2. 使屬性在MainForm上保持靜態。

我喜歡選項1,因爲我不喜歡靜態屬性左右浮動的只是任何人改變想法。它也可能會引入尷尬的線程問題。但它聽起來像選項2更接近你正在尋找。

+0

謝謝添加靜態變量訪問變量公共靜態INT VAR;「這讓我從form2訪問它。 –

+0

@ blackholeearth0_gmail良好的交易。請注意,如果你把這種模式做得太過分(而且經常這樣做),你的代碼將變成意大利麪條,並且很難調試/維護。你的意思是通過一個refence, – Andrew

+0

; f2.open(本);這是傳遞參考的東西嗎?謝謝。 –

1

打開當你的Form2通過目前的表單實例是這樣的:

Form2 f2 = new Form2(); 
f2.open(this); 

然後你可以從Form2:

// Owner represents your main form, we are making cast to access PRTY_VAR property 
((Main_Form)Owner).PRTY_VAR= 1 + trackBar2.Value; 
+0

你簡單又好,謝謝 –