【问题标题】:dynamically add content to tabpages动态添加内容到标签页
【发布时间】:2014-08-04 00:54:16
【问题描述】:

我正在尝试使用 c# 将列表框和图片动态添加到选项卡控件中动态创建的选项卡页中。表单有一个按钮,它可以为 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++;
    }

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

感谢您的帮助..!!

【问题讨论】:

  • 尝试更改它,以便将tab 添加到TabControlItems 属性,而不是Controls 属性。所以应该是:tabControl1.Items.Add(tab).
  • 好的,我解决了内容问题,因为我必须在选项卡声明之后初始化列表和框。现在唯一的问题是点击事件处理程序的访问,以便我可以将项目从动态列表 1 添加到 2
  • 实际上,您可能使用的是 WinForms,而不是 WPF。请为您使用的技术添加标签。
  • 还是不知道怎么从pictureBox_Click(object sender, EventArgs e){}中访问list和list2
  • 如果您想从类中的其他方法访问它们,您需要创建类级变量来保存对listlist2 的引用。

标签: c# winforms


【解决方案1】:

要从类中的不同方法访问新创建的项目(listlist2),您需要创建类级变量。例如,将您的样本扩大一点:

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"]);
    }
}

【讨论】:

  • 谢谢伙计,这真的很有帮助!!
  • 又出问题了。在上一个选项卡中创建新选项卡时,“列表”不能再添加项目到 list2
  • 不确定我是否关注。如果要添加多个选项卡,并且想要跟踪所有选项卡上的所有列表框,则需要使用动态方法(例如数组)来创建和跟踪每个选项卡上的列表框。上面的代码只是一个示例,用于演示如何在类范围内定义 _list 变量并在类中的不同方法中使用它。
猜你喜欢
  • 1970-01-01
  • 2013-02-27
  • 2019-04-09
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多