• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

我循环生产控件数组后怎么访问不了???

formatkm 2003-09-14 12:15:25
我循环生成CheckBox控件数组,是二维的,但是这样访问不了:checkbox[1,2].请问应该怎样才能访问这些控件的属性和用他们的方法?
...全文
11 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
formatkm 2003-09-14
ok了,谢谢老哥,就是这出的问题了!
回复
jjcccc 2003-09-14
按你程序中定义的name属性其实没有什么用,还是要改定义的范围,在class中定义成类的成员变量,这样在类内部访问就没有问题,但要公开的话,在定义的时候,加上public修饰符。
回复
formatkm 2003-09-14
改了,还是错误依旧!谢谢
回复
formatkm 2003-09-14
那怎么样通过他的name属性访问这个控件呢?
回复
jjcccc 2003-09-14
我估计是我的数组的作用范围定义上有问题,我如果在这个函数中访问就不会出什么问题,...
==>那时自然,出了这个函数,该函数定义的局部变量当然不能访问了。可以在class级定义这些需要引用的控件数组。如:
public class MyControls
{
GroupBox[] gb=new GroupBox[9];

CheckBox[,] cb=new CheckBox[9,30];

//............
private void arryCB(){...}
}
回复
jjcccc 2003-09-14
哦,最好改成:cb[i,n].Name = "checkBox1"+i.ToString()+n.ToString();
回复
jjcccc 2003-09-14
这一句cb[i,n].Name = "checkBox1";改成cb[i,n].Name = "checkBox"+n.ToString();看看先。
回复
formatkm 2003-09-14
我估计是我的数组的作用范围定义上有问题,我如果在这个函数中访问就不会出什么问题,那应该怎样定义这个范围。
回复
formatkm 2003-09-14
肯定没有越界,我一个text文件中最多只有18行。
回复
jjcccc 2003-09-14
因为string[,] tt=new string[9,30];若下面这段代码中的文件的长度超过30行的话:
则tt[i,n]=sr.ReadLine())不就越界了吗?

while ((tt[i,n]=sr.ReadLine())!=null)
{

cb[i,n]=new CheckBox();


cb[i,n].Location = new System.Drawing.Point(90*x+10,y);
cb[i,n].Name = "checkBox1";
cb[i,n].TabIndex =n;
cb[i,n].Text = tt[i,n];
cb[i,n].Size=new System.Drawing.Size(15*tt[i,n].Length+20, 20);
gb[i].Controls.Add(cb[i,n]);

n++;

if ((n%6)==0)
{
y=y+24;
x=0;
}
else
{
x++;
}
//****************************

}
回复
formatkm 2003-09-14
private void arryCB()
{

GroupBox[] gb=new GroupBox[9];
int i;
int n=0;//读取项目
int gbb=0;//groupbox bing
int row;//gropubox row
int beforeRow=0;//上一个的行数
string[,] tt=new string[9,30];
CheckBox[,] cb=new CheckBox[9,30];
string[] filename={"content0.txt","content1.txt","content2.txt","content3.txt","content4.txt","content5.txt","content6.txt","content7.txt","content8.txt"};

for (i=0;i<8;i++)
{
gb[i]=new GroupBox();


//gb[i].Name = "groupBox8";

gb[i].TabIndex =i ;
gb[i].TabStop = false;
gb[i].Text = i.ToString();
gb[i].Visible=true;
this.tabPage1.Controls.Add(gb[i]);


StreamReader sr=new StreamReader(filename[i],System.Text.Encoding.GetEncoding("gb2312"));//循环读文件中的内容

int y=20;//
int x=0;//定义位置


while ((tt[i,n]=sr.ReadLine())!=null)
{

cb[i,n]=new CheckBox();


cb[i,n].Location = new System.Drawing.Point(90*x+10,y);
cb[i,n].Name = "checkBox1";
cb[i,n].TabIndex =n;
cb[i,n].Text = tt[i,n];
cb[i,n].Size=new System.Drawing.Size(15*tt[i,n].Length+20, 20);
gb[i].Controls.Add(cb[i,n]);

n++;

if ((n%6)==0)
{
y=y+24;
x=0;
}
else
{
x++;
}
//****************************






}

if ((n/6)==0)
{
row=n/6;

}
else
{
row=(n / 6+1);
}

if (i==0)
{
gb[i].Location = new System.Drawing.Point(24, 10);
gbb=10;
beforeRow=row;
}
else
{
gb[i].Location = new System.Drawing.Point(24, 10+beforeRow*35+gbb);
gbb=10+beforeRow*35+gbb;
gb[i].Text+=beforeRow.ToString();
beforeRow=row;
}

gb[i].Size = new System.Drawing.Size(560, 35*row);
//b[i]=n;
n=0;
sr.Close();



}
}
回复
jjcccc 2003-09-14
代码贴出来先,否则怎么知道错在那里呢?
回复
formatkm 2003-09-14
报告的错误是:[]内索引数错误。
回复
formatkm 2003-09-14
但是像那样就是访问不了!
回复
coudoufu 2003-09-14
和普通控件的使用没什么两样啊!
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2003-09-14 12:15
社区公告

让您成为最强悍的C#开发者