2012-06-29 114 views
0

我有一個窗體上的五個按鈕,當單擊時使布爾每一個是真或假,他們還加載一個新的形式。當這個表單被加載時,我需要新的表單來首先檢查那些布爾表達式是真的還是假的。這將導致表單加載正確的數據。從一種形式閱讀bools到另一種形式c#

我將bools設置爲公衆認爲這會起作用,並且在form2_load中我檢查了哪一個是真的。然而這似乎並不奏效。我首先嚐試改變一個標籤,它是文本。文本沒有改變,我不認爲這些布爾被讀取或檢查。

有誰知道這個問題可能是什麼?

Form 1代碼:

public bool Room1; 
public bool Room2; 
public bool Room3; 
public bool Room4; 
public bool Room5; 

private void btnRoom1_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 

     //This displays Form2 
     Form2 RoomTemplate = new Form2(); 
     RoomTemplate.Show(); 

     Room1 = true; 
     Room2 = false; 
     Room3 = false; 
     Room4 = false; 
     Room5 = false; 

    } 

Form2的代碼:

public Form3() 
    { 
     InitializeComponent(); 
     Form2 Rooms = new Form2(); 

     if (Rooms.Room1 == true) 
     { 
      lblTitle.Text = "Living Room"; 
     } 

     if (Rooms.Room2 == true) 
     { 
      lblTitle.Text = "Dining Room"; 
     } 
+2

哇 - 首先你是不是錯過了一些代碼?你說Form2代碼:但是你展示Form3的構造函數,它初始化form2 ...從我可以看到的,但它看起來不錯,但發佈缺少的代碼 – Charleh

回答

0

這是做這件事:

public bool Room1; 
public bool Room2; 
public bool Room3; 
public bool Room4; 
public bool Room5; 
private void btnRoom1_Click(object sender, EventArgs e) 
{ 
    this.Hide(); 

    Room1 = true; 
    Room2 = false; 
    Room3 = false; 
    Room4 = false; 
    Room5 = false; 

    //This displays Form2 
    Form2 RoomTemplate = new Form2(this); 
    RoomTemplate.Show(); 
} 

public class Form2() 
{ 
    public Form2(Form1 form1) 
    { 
     InitializeComponent(); 
     if(form1.Room1 == true) 
     { 
      lblTitle.Text="Living Room"; 
     } 
     else if(form1.Room2==true) 
     { 
      // 
     } 
     // 
    } 
} 
2

不要在Form3創建的Form2一個新的實例。如果你不想傳遞引用或做單例,那麼只需在其構造函數中將Form2分配給一個靜態屬性即可。喜歡的東西:

public static Form2 Instance { get; set; } 
public Form2() { 
    Instance = this; 
} 

然後在Form3訪問與Form2.Instance.Room1布爾值。

2

Form2 Rooms = new Form2();

在Form3的構造函數中要創建窗體2的新對象,它會使用默認值所有布爾屬性,這不是調用對象是窗體2的新實例。您應該在Form2的構造函數中傳遞Form2對象並訪問其中的公共屬性。

在窗體2

Form3 RoomTemplate = new Form3(this); 
RoomTemplate.Show(); 

在窗體2

Form3的Constrtuctor

public Form3(Form frm) 
{ 
    MessageBox.Show(frm.Room1.ToString());  
} 
0

看起來你正在設置在btnRoom1_Click事件的值,但你引用的直接使用Room值在for實例化之後。即在調用btnRoom1_Click方法之前。

1

Form3中,您需要在其他位置修改的實例Form2。你的Form3將只會使用Form2設置爲那些布爾值的默認值,因爲你正在實例化一個新的Form2,它不知道你以前設置了什麼。

0

Form3中的Form2與按下按鈕的窗體不是同一個對象。你可以通過Form2的對象Form3(假設窗口2打開Form3)或通知Form3對象時,裏面的東西Form2的發生或使用單Fomr2或靜態字段

相關問題