2016-07-13 49 views
-4

我處於項目的中間,我試圖將bool從一個窗體傳遞到另一個窗體,但是任何時候,我都這樣做不起作用。將bool從一種表單傳遞到另一種表單(不工作)

形式1

public bool test = false; 
private void bluelineToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    this.BackgroundImage = Properties.Resources.Background_Mainframe_Blueline; 
    test = true; 
} 

形式2

private void AboutWindow_Load(object sender, EventArgs e) 
{ 
    Mainframe main = new Mainframe(); 

    if (main.test == true) //reads test as false rather then true. 
    { 
     this.BackgroundImage = Properties.Resources.Background_About_Blueline; 
    } 
} 

當第二形式加載它是讀取布爾爲真但它讀取爲假。

我讀的布爾錯了嗎?

有人可以請幫忙。

+0

是它真正形式加載時?看起來你只在按下按鈕時纔將test設置爲true,這可能是在窗體加載後。 此外,這不是那麼有效。如果Form1包含在Form1中,它不會像C#中的任何其他對象那樣知道Form1的存在。如果您確實需要第二種形式從第一種形式獲取數據,則可以在Form2上使用Form1調用方法來對其中的數據進行變形。 – Ares

+1

這是因爲您正在創建一個新的主窗體,它將變量設置回其默認值,而不是引用已創建的主窗體。創建一個新的類文件,並將bool變量放在該新類中,並以這兩種形式使用它。 – sous2817

+0

About窗口爲什麼會創建一個新的Mainframe?我懷疑你只是爲了讓對象訪問而已,但實際上你需要訪問現有的Mainframe實例。 –

回答

1

是的。這是真的。當Form2負載時,main表單初始化。在初始化main.testFalse。您必須點擊main表格的bluelineToolStripMenuItem才能將main.test設置爲True。但是如果條件在main表單的初始化之後檢查。

1

當您創建子窗體時,您需要傳遞父窗體的引用,而不是從子內部實例化一個新窗體。

1

這是通過創建一個名爲Variables.cs的新公共類,然後將變量添加到該類並在其他類中調用它們來解決的。

實施例:

Variables.cs

public class Variables 
{ 
    public static bool test = false; 
} 

Form1中

private void bluelineToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Variables.test = true; 
} 
相關問題