2011-09-29 267 views
0

我有一個WPF主窗口,其中包含一個帶有按鈕的工具欄和一個顯示帶有列表框的頁面的tabcontrol。該頁面託管在一個框架上,並且框架設置在我選擇的選項卡上。將項目添加到列表框

當我點擊我的工具欄上的一個按鈕時,會彈出一個新窗口,顯示一個文本框和一個提交按鈕。當我按提交按鈕時,我想將文本框內容插入到主窗口上的列表框中。但是,列表框中沒有顯示任何內容。我試過listbox.Items.Add(),但它仍然不會顯示。

public partial class AddNewCamper : Window 
{ 
    public AddNewCamper() 
    { 
     InitializeComponent(); 
    } 

    private void btnNewSubmit_Click(object sender, RoutedEventArgs e) 
    { 
     CampersPage c; 

     // Converting string to int b/c thats what camper() takes in. 
     int NewAge = Convert.ToInt16(txtNewAge.Text); 
     int NewGrade = Convert.ToInt16(txtNewGrade.Text); 

     // Create a new person 
     Camper person = new Camper(NewAge, NewGrade, txtNewFirstName.Text); 
     txtNewFirstName.Text = person.getName(); 

     // Trying to add the first name of the person to display on the listbox of another window. 
     c.testListBox.Items.Add(txtNewFirstName.Text); 
    } 
+1

'CampersPage c;'在此之後,'c'不會在任何地方初始化。可能有一個NullReferenceException被吞噬了。 –

+0

而我不認爲我正確地將字符串文本轉換爲int – TMan

+0

是的,我知道你的意思。但是,如果我創建camperPages c = new camperPage,那麼它將成爲一個全新的頁面,我已經在主窗口代碼中創建了它。 – TMan

回答

0

您可以按照以下任何一種方法。但根據你的意見,我想解決方案3適合你。

1)嘗試初始化c首先。如果不爲其分配內存,則不能使用該對象。 2)如果要使用同一個對象,請在所需的類中使用主窗口 中創建的對象的引用。 這樣的事情應該工作:

CampersPage C =在主窗口參考CampersPage對象],然後將項目添加到您的列表框

3)如果你想使用列表框對象,讓你CampersPage類靜態。 使其變爲靜態不會要求您明確初始化您的類。

public static CampersPage { 
// do something here 
} 

請確保您在CampersPage中將您的列表框聲明爲公共。

然後在CampersPage定義需要你的列表框類,請執行下列操作

CampersPage.testListBox.Items.Add(txtNewFirstName.Text); 

4)如果類在同一個命名空間,你可以聲明列表框作爲一個全球性的公共財產,從靜止訪問它在同一個命名空間中的類。

+0

是啊,我Idk我會這樣做。對不起,如果我聽起來很愚蠢 – TMan

+0

你需要聲明你的CampersPage類是靜態的。看看答案中的編輯 – krammer