动态地向选项卡添加内容

本文关键字:添加 选项 动态 | 更新日期: 2023-09-27 18:16:06

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

问题是当我第二次点击按钮时,它删除了前一个选项卡中的所有内容并将其添加到最后一个选项卡中。

    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++;
    }

我还声明了一个整数递增器,以便所有新内容都有自己的名称标识。另一个问题是我无法访问pictureBox点击事件处理程序,这也是动态创建的。

谢谢你的帮助!!

动态地向选项卡添加内容

要从类中的不同方法访问新创建的项(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"]);
    }
}
相关文章: