过程A中在主窗口动态添加PicBoxFace,在过程B中该如何操作?
private void FormMain_Load(object sender, System.EventArgs e)
{
PictureBox[,] PicBoxFace = new PictureBox[99,99];
for(int i=0;i<intTileHNum;i++)
for(int j=0;j<intTileVNum;j++)
PicBoxFace[i,j] = new PictureBox();
PicBoxFace[i,j].ID = "PicBoxFace"+i+"X"+j;
}
private void ProcessIniBMap()
{
//以下是想要操作上个过程动态添加的PicBoxFace[i,j]
//但是通过PicBoxFace[i,j]是不能访问的,该如何实现?通过ID访问?
//有类似FindControl的函数吗?
for(int i=0;i<99;i++)
for(int j=0;j<99;j++)
PicBoxFace[i,j].Image=ImageTarrain[0];
}
问题点数:0、回复次数:8Top
1 楼hxhbluestar(贺星河)回复于 2004-09-04 20:10:12 得分 0
不是通过ID访问,而是通过索引访问
在 FormMain_Load()中添加一个Panel控件,假设为Panel1
并添加一个ArrayList picList = new ArrayList()存放这些PictureBox
PicBoxFace[i,j] = new PictureBox();
this.Panel1.Controls.Add(PicBoxFace[i,j]);
this.picList.Add(PicBoxFace[i,j]);
在 ProcessIniBMap()中
for(int i=0;i<99;i++)
{
for(int j=0;j<99;j++)
{
PictureBox findPic = (PictureBox)this.picList[i*j];
findPic.Image = ImageTarrain[0];
}
}
Top
2 楼hxhbluestar(贺星河)回复于 2004-09-04 20:12:20 得分 0
更正一下上面的错误
int k=0;
for(int i=0;i<99;i++)
{
for(int j=0;j<99;j++)
{
k++;
PictureBox findPic = (PictureBox)this.picList[k];
findPic.Image = ImageTarrain[0];
}
}
不能用 i*j来计算索引Top
3 楼WithSmile2000(其实我是一个马甲)回复于 2004-09-04 21:00:02 得分 0
在 FormMain_Load()中添加一个Panel控件,假设为Panel1
并添加一个ArrayList picList = new ArrayList()存放这些PictureBox
---------------------------------------------------------------------
但是,picList还是只存在于FormMain_Load()中,ProcessIniBMap中还是不能直接引用啊。Top
4 楼happyno7(夕丁)回复于 2004-09-04 21:21:22 得分 0
private void FormMain_Load(object sender, System.EventArgs e)
{
PictureBox[,] PicBoxFace = new PictureBox[99,99];
.....
}
-------------------------------------
你的PicBoxFace 是FormMain_Load函数的局部变量,离开了FormMain_Load函数就不存在了。。。其它函数当然不能访问了。
try:
PictureBox[,] PicBoxFace = new PictureBox[99,99];
private void FormMain_Load(object sender, System.EventArgs e)
{
for(int i=0;i<intTileHNum;i++)
for(int j=0;j<intTileVNum;j++)
PicBoxFace[i,j] = new PictureBox();
PicBoxFace[i,j].ID = "PicBoxFace"+i+"X"+j;
}
.........
Top
5 楼WithSmile2000(其实我是一个马甲)回复于 2004-09-04 23:38:55 得分 0
谢谢楼上的,这样的方法能行,我已经试过拉,但是能通过ID访问吗?有类似中ASP.NET中的FindControl函数吗?
Top
6 楼noahart(八卦小子)回复于 2004-09-05 00:12:30 得分 0
ID是什么啊?
可以去掉 PicBoxFace[i,j].ID = "PicBoxFace"+i+"X"+j;
这样访问:
private void ProcessIniBMap()
{
IEnumerator keys=PicBoxFace.GetEnumerator();
keys.MoveNext();
while(keys.Current!=null)
{
PictureBox pic=(PictureBox)keys.Current;
pic.Image=this.imageList1.Images[0];//图片
keys.MoveNext();
}
//依次为picbox加图片
}Top
7 楼kissmett(雨岸一帆)回复于 2004-09-05 02:26:55 得分 0
WithSmile2000 (其实我是一个马甲) :
PictureBox类哪有ID属性啊?
没有ID怎么谈通过ID查找?
PicBoxFace[i,j].ID = "PicBoxFace"+i+"X"+j;这一句能编译的过?Top
8 楼WithSmile2000(其实我是一个马甲)回复于 2004-09-06 10:23:15 得分 0
kissmett(雨岸一帆) ( )
PicBoxFace[i,j].ID = "PicBoxFace"+i+"X"+j;这一句能编译的过?
----------------------------------------------
不行的,我本来以为也像ASP.NET中的findcontrol一样可以通过ID访问,这样看来是不行的。
noahart(八卦小子) ( )
---------------------------------------------
假如我想有个只对特定序号的几个PicBoxFace进行图片显示,这样的方法不是十分繁复?C#中就不提供通过ID访问实例的函数?Top




