c#如何实现在一个panel中插入多个picture

流浪若相惜 2014-10-14 09:53:22
我的代码如下:
 for (int i = 0; i < imageNode.ChildNodes.Count; i++)
{
name = Convert.ToString(imageTable.Rows[i]["name"]);

PictureBox pictureBoxX = new PictureBox();
pictureBoxX.Image = null;
Rectangle ScreenArea = System.Windows.Forms.Screen.GetBounds(this);
pictureBoxX.Width = ScreenArea.Width;
pictureBoxX.Height = ScreenArea.Height;
//pictureBoxX.Image = null;
imageFileName = "";

if (name != "")
{
imageFileName = dataFolder + @"\" + name;
buffer = File.ReadAllBytes(imageFileName);
memoryStream = new MemoryStream(buffer);
memoryStream.Seek(0, SeekOrigin.Begin);//20141013????

imageX = Image.FromStream(memoryStream);
pictureBoxX.Image = imageX;
}
picturefLPanel.Controls.Add(pictureBoxX);
}


求解,为什么只显示一张图片?
...全文
422 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
流浪若相惜 2014-10-14
  • 打赏
  • 举报
回复
引用 6 楼 chb345536638 的回复:
设置下Location http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.location(v=vs.80).aspx
如果我的图片个数不定,那怎么设置每次的位置?
卧_槽 2014-10-14
  • 打赏
  • 举报
回复
每次都放同一个位置,自然只看到一张咯。 就好比你把相片放桌上,每次都放在同一个位置,摞起来之后,只能看到最上面那张一样。 这种幼儿园级别的生活逻辑,就不要拿出来问了。
  • 打赏
  • 举报
回复
设置下Location http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.location(v=vs.80).aspx
流浪若相惜 2014-10-14
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
你应该 没循环一次,计算一次PictureBox的位置。
如何做?
流浪若相惜 2014-10-14
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
调试下,看看是不是重叠在一块了。
能稍微详细点嘛?我查看什么?显示的其实是第一个副图片
threenewbee 2014-10-14
  • 打赏
  • 举报
回复
调试下,看看是不是重叠在一块了。
exception92 2014-10-14
  • 打赏
  • 举报
回复
你应该 没循环一次,计算一次PictureBox的位置。
流浪若相惜 2014-10-14
  • 打赏
  • 举报
回复
我用的是FlowLayoutPanel
流浪若相惜 2014-10-14
  • 打赏
  • 举报
回复
引用 12 楼 dongxinxi 的回复:
[quote=引用 11 楼 superliu1122 的回复:] pictureBoxX.Width = ScreenArea.Width;                 pictureBoxX.Height = ScreenArea.Height; 一张图片就把整个屏幕占满了,其他的那还有地方显示
正解 流布局,类似网页CSS中的float,所以不是location的问题 问题是它将每个picbox的尺寸都设置为显示器的尺寸了,导致picturefLPanel显示不下去 控制间隔可以设置pictureBoxX.Margin = new Padding(5); [/quote]是的,还有一个问题是我设置了autoscroll,为什么panel没有出现滚动条
  • 打赏
  • 举报
回复
引用 11 楼 superliu1122 的回复:
pictureBoxX.Width = ScreenArea.Width;                 pictureBoxX.Height = ScreenArea.Height; 一张图片就把整个屏幕占满了,其他的那还有地方显示
正解 流布局,类似网页CSS中的float,所以不是location的问题 问题是它将每个picbox的尺寸都设置为显示器的尺寸了,导致picturefLPanel显示不下去 控制间隔可以设置pictureBoxX.Margin = new Padding(5);
superliu1122 2014-10-14
  • 打赏
  • 举报
回复
pictureBoxX.Width = ScreenArea.Width;                 pictureBoxX.Height = ScreenArea.Height; 一张图片就把整个屏幕占满了,其他的那还有地方显示
我叫钊钊 2014-10-14
  • 打赏
  • 举报
回复
大概意思就是你要添加几个 就事先定义几个的变量 然后用这个变量来计算每个图片的位置 pb.Location = new Point((i3 % 6+1) * 100 - 60, k3);
我叫钊钊 2014-10-14
  • 打赏
  • 举报
回复
刚好前几天我也写了一个 你看看
foreach (System.IO.FileInfo file in files) { if (i3 >= 12) { MessageBox.Show("请清理不需要的快捷方式!"); break; } i3++; WshShell shell = new WshShell(); IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut("C:\\Program Files\\Q test\\easy goto\\" + file.Name + ""); PictureBox pb = new PictureBox(); pb.Size = new Size(38, 34); int k3; if (i3 <= 6) { k3 = 61; } else { k3 = 2; } pb.Location = new Point((i3 % 6+1) * 100 - 60, k3); pb.SizeMode = PictureBoxSizeMode.StretchImage; pb.BackColor = Color.Transparent; pb.Tag = file.Name; pb.BorderStyle = BorderStyle.None; panel22.Controls.Add(pb); Label lb = new Label(); lb.BackColor = Color.Transparent; lb.Font = new Font("Cambria", 7, FontStyle.Regular); string k = file.Name.Remove(file.Name.Length - 8, 8); if (k.Length <= 10) { lb.Text = k; lb.Tag = file.Name; } else { lb.Text = k.Substring(0, 10)+"..."; lb.Tag = file.Name; } if (k.Length <= 6) { lb.Location = new Point(pb.Location.X -2, pb.Location.Y + 38); } else { lb.Location = new Point(pb.Location.X - 5, pb.Location.Y + 38); } lb.ForeColor = Color.White; panel22.Controls.Add(lb);

110,561

社区成员

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

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

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