2011-09-29 206 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