我正在尝试使用c#将列表框和图片动态添加到tabcontrol中的动态创建的tabpage中。表单具有一个按钮,该按钮可动态创建tab控件的tabpage,还可以添加列表框和其他内容。
问题是,当我第二次按下按钮时,它将删除上一个选项卡中的所有内容并将其添加到最后一个选项卡中。
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 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"]);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句