C# 动态地将内容添加到选项卡页面

C# 动态地将内容添加到选项卡页面,c#,winforms,C#,Winforms,我正在尝试使用c#将列表框和图片动态添加到tabcontrol中动态创建的tabpages中。表单有一个按钮,它可以动态地为tabcontrol创建tabpages,还可以在列表框内部添加其他内容 问题是,当我第二次按下按钮时,它会删除上一个选项卡中的所有内容,并将其添加到上一个选项卡中 private void AddNewPr_Click(object sender, EventArgs e) { TabPage tab = new TabPage();

我正在尝试使用c#将列表框和图片动态添加到tabcontrol中动态创建的tabpages中。表单有一个按钮,它可以动态地为tabcontrol创建tabpages,还可以在列表框内部添加其他内容

问题是,当我第二次按下按钮时,它会删除上一个选项卡中的所有内容,并将其添加到上一个选项卡中

    private void AddNewPr_Click(object sender, EventArgs e)
    {
        TabPage tab = new TabPage();
        ListBox list = new ListBox();
        ListBox list2 = new ListBox();
        PictureBox pictureBox = new PictureBox();
        PictureBox pictureBox2 = new PictureBox();
        tab.Name = "tabPage" + n;
        tab.Text = "Property " + n;
        tabControl1.Controls.Add(tab);
        list.Items.AddRange(new object[] {
                "Id",
                "Name"
        });
     //more list properties here///
     //other items here created/////

        tab.Controls.Add(list);
        tab.Controls.Add(list2);
        tab.Controls.Add(pictureBox);

        n++;
    }
我还声明了一个整数incrementor,以便所有新内容都有自己的名称标识。 另一个问题是,我无法访问pictureBox click事件处理程序,它也是动态创建的


谢谢你的帮助

要从类中的其他方法访问新创建的项(
list
list2
),需要创建类级变量。例如,将示例展开一点:

public class MyForm : Form
{
    //Class-level variables, accessible to all methods in the class
    private ListBox _list;  
    private ListBox _list2;

    private void AddNewPr_Click(object sender, EventArgs e)
    {
        TabPage tab = new TabPage();
        _list = new ListBox();
        _list2 = new ListBox();
        PictureBox picBox = new PictureBox();
        picBox.Click = picBox_Click;

        //More stuff here

        //Add the controls        
        tabControl1.Controls.Add(tab);
        tab.Controls.Add(list);
        tab.Controls.Add(list2);
        tab.Controls.Add(pictureBox);
    }

    private void picBox_Click(object sender, EventArgs e)
    {
        //_list and _list2 are in scope here because they are defined at the class-level
        _list.Items.AddRange(new object()["Id", "Name"]);
    }
}

尝试更改它,以便将
选项卡
添加到
选项卡控件
属性的
属性,而不是
控件
属性。所以应该是:
tabControl1.Items.Add(tab)
。好的,我修复了内容的问题,因为我必须在tabs声明之后初始化列表和框。现在唯一的问题是访问click事件处理程序,以便我可以将项目从动态列表1添加到2。实际上,看起来您可能使用的是WinForms,而不是WPF。请添加您正在使用的技术的标记。我仍然不知道如何从pictureBox_Click(object sender,EventArgs e){}中访问列表和列表2。如果您想从类中的另一个方法访问它们,您需要创建类级变量来保存对
列表
列表2
的引用。谢谢,伙计,那真的很有帮助!!又有问题了。创建新选项卡时,上一选项卡中的“列表”无法向列表中添加更多项目2我不确定是否遵循。如果要添加多个选项卡,并希望跟踪所有选项卡上的所有列表框,则需要使用动态方法(如数组)来创建和跟踪每个选项卡上的列表框。上面的代码只是一个示例,演示如何在类范围内定义
\u list
变量,并在类中的不同方法中使用它。