2012-05-27 20 views
1

我在傳遞形式之間的變量時有點麻煩。我創建了一個按鈕數組,並希望將按鈕文本傳遞給下一個表單。但是這僅僅是返回一個空值在C中傳遞訪問器#

在第一種形式

private string staffmem; 
    public string Staffmem 
    { 
     get 
     { 
      return staffmem; 
     } 
    } 

    public void ClickButton(Object sender, EventArgs e) 
    {   
     Button btn = (Button)sender; 
     staffmem = btn.Text; 
     MessageBox.Show("Welcome " + staffmem); 

     MainScreen ms = new MainScreen(); 
     ms.Show(); 
    } 

,然後在第二個形式

 private void MainScreen_Load(object sender, EventArgs e) 
    { 
     Form1 f1 = new Form1(); 
     staffmem = f1.Staffmem; 

任何幫助將非常感激。在此先感謝

回答

0

您正在通信的兩端創建新表單:單擊按鈕時以及要檢索文本時 - 這會導致訪問新創建的對象上的Staffmem字段,該字段尚未設置爲任何內容,因此返回null值。

爲了能夠檢索文字,你需要有相同Form1對象MainScreen創建時:

MainScreen ms = new MainScreen(form1); 

其中form1是實際Form1對象,並將其存儲在MainScreen作爲成員變量

// in MainScreen class 
private Form1 f1; 

然後在該對象上訪問Staffmem所存儲的成員變量:

// in MainScreen_Load() 
staffmem = f1.Staffmem; 

:根據您的需求,您可能不希望創建從每一個按鈕被點擊任一時間新MainScreen。在這種情況下(如果你已經有了要與通信的創建MainScreen),你需要通過MainScreen對象爲Form1對象好,Form1對象被創建(遵循上述techniqe)

+0

阿權。非常感謝你的幫助。這是我猜測的常見錯誤。 – MosesIAmnt

0

您還沒有經過任何東西,你正在創建一個新的窗體

Form1 f1 = new Form1(); 
staffmem = f1.Staffmem; 

如果數據被共享 - 一個真正的窮人的辦法是使字符串靜態

private static string staffmem; 
0

時您正在創建一個全新的Form1 - 其中,您希望使用現有的實例。

您需要做的是,在您的MainScreen對象上定義Staffmem,並在創建它之後對其進行設置。

MainScreen ms = new MainScreen(); 
ms.Staffmem = btn.Text; 

然後,在你MainScreen_Load: 設置的值。

0

您正在處理2個不同的對象,首先創建一個Form1對象,然後單擊該按鈕將設置該單個對象的屬性值,但是在您的主屏幕中創建Form1的新實例。

您可以將表單對象作爲參考傳遞給MainScreen本身。

MainScreen ms = new MainScreen(this); 
ms.Show(); 

然後在MainScreen類中更新構造函數。

public MainScreen(Form1 form) 
{ 
    this.form1 = form; 
} 

並將引用保存在字段中,如此。

private Form1 form1; 

在這之後,你能夠做到這一點,

這將使意義
private void MainScreen_Load(object sender, EventArgs e) 
{ 
    staffmem = form1.Staffmem; 
}