pictureBox如何循环赋值

Johnny_Bao 2012-09-18 09:58:21
OpenFileDialog ofd = new OpenFileDialog();
ofd.Multiselect = true;
string[] picArr;
if (ofd.ShowDialog() == DialogResult.OK)
{
picArr = ofd.FileNames;
for (int i = 0; i<picArr.Length;i++ )
{
persondata.Add(new person(i.ToString()));
bmp = (Bitmap)Image.FromStream(GetImgStream(picArr[i]));
image = new Emgu.CV.Image<Bgr, Byte>(bmp);
sbmp = new Bitmap(128, 128, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
norm = new Emgu.CV.Image<Gray, Byte>(sbmp);
int x = HJFace.FaceLocated(image.Ptr, norm.Ptr, persondata[j].Pfeature[0], 0);
if (x == 0)
{
sbmp = IplImagePointerToBitmap(norm.Ptr);
pictureBox1.Image = sbmp;
if (sbmp == null)
{
continue;
}

//PictureBox pb = (PictureBox)this.Controls["pictureBox" + i.ToString()];
//(Controls["pictureBox" + i.ToString()] as PictureBox).Image = sbmp;
//pb.Image = sbmp;

//((PictureBox)picFaecArr.GetValue(i)).Image = sbmp;
//string str = string.Format("picture{0}", i);
//((PictureBox)str).Image = sbmp;
}
这样赋值老是出错
...全文
359 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
熙风 2012-09-18
  • 打赏
  • 举报
回复
不过没道理会找不到控件啊
熙风 2012-09-18
  • 打赏
  • 举报
回复
如果还是空的话那你就动态创建pictureBox控件显示图片,不用选择图片后赋值。。。
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复
我试过,用picturebox1 可以显示,用你这个的话就不能显示,不过谢谢你[Quote=引用 16 楼 的回复:]
cl为空的话,应该进不了判断if (cl is PictureBox)
[/Quote]
  • 打赏
  • 举报
回复
cl为空的话,应该进不了判断if (cl is PictureBox)
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复
"pictureBox" + i.ToString()是正确的,可以得到pictureBox0,其他的都是空[Quote=引用 12 楼 的回复:]
Controls["pictureBox" + i.ToString()]为null了,
或者Controls["pictureBox" + i.ToString()] as PictureBox 为null.
设置个断点,看看变量值,很容易解决的。
[/Quote]
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复
object o 就是为空的,运行不到下一句[Quote=引用 13 楼 的回复:]
引用 8 楼 的回复:

还是不行引用 4 楼 的回复:
C# code

object o = this.GetType().GetField("pictureBox" + i, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this);
Pic……
[/Quote]
熙风 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

还是不行引用 4 楼 的回复:
C# code

object o = this.GetType().GetField("pictureBox" + i, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this);
PictureBox pb= (……
[/Quote]

你调试看下 PictureBox pb= (PictureBox )o;这个pb是空的么?
宝_爸 2012-09-18
  • 打赏
  • 举报
回复
Controls["pictureBox" + i.ToString()]为null了,
或者Controls["pictureBox" + i.ToString()] as PictureBox 为null.
设置个断点,看看变量值,很容易解决的。
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复
该如何改呢,求赐教
宝_爸 2012-09-18
  • 打赏
  • 举报
回复
看看,大家找到问题了吧。
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复
c1为空的[Quote=引用 7 楼 的回复:]
很明显,你需要判断一下,有些拼出来的是不存在的

C# code

Control cl=Controls["pictureBox" + i];
if (cl is PictureBox)
{
(cl as PictureBox).Image = null;……
[/Quote]
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复
还是不行[Quote=引用 4 楼 的回复:]
C# code

object o = this.GetType().GetField("pictureBox" + i, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this);
PictureBox pb= (PictureBox )o;
p……
[/Quote]
  • 打赏
  • 举报
回复
很明显,你需要判断一下,有些拼出来的是不存在的
Control cl=Controls["pictureBox" + i];
if (cl is PictureBox)
{
(cl as PictureBox).Image = null;
}
极地_雪狼 2012-09-18
  • 打赏
  • 举报
回复
PictureBox pb = (PictureBox)this.Controls["pictureBox" + i.ToString()];

你判断一下控件是否存在
熙风 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

直接用pictureBox1.Image = sbmp不会出错,我想循环赋值
[/Quote]

PictureBox pb = (PictureBox)this.Controls["pictureBox" + i.ToString()];

你这样根本找不到那个picturbox控件,,用我上面的方法赋值
熙风 2012-09-18
  • 打赏
  • 举报
回复
 object o = this.GetType().GetField("pictureBox" + i, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this);
PictureBox pb= (PictureBox )o;
pb.Image = sbmp;


这样试下,,
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复
直接用pictureBox1.Image = sbmp不会出错,我想循环赋值
Johnny_Bao 2012-09-18
  • 打赏
  • 举报
回复

(Controls["pictureBox" + i.ToString()] as PictureBox).Image = sbmp;
提示未将对象引用设置到对象的实例
宝_爸 2012-09-18
  • 打赏
  • 举报
回复
好像用了第三方库?
什么异常?
哪里出错?


好的回答的前提是有一个好的问题。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧