7

我在 c# winforms 中使用一个面板,并使用循环填充面板与图片框的编号

例如,面板名称为 panal

foreach (string s in fileNames)
{            
    PictureBox pbox = new new PictureBox();
    pBox.Image = Image.FromFile(s);
    pbox.Location = new point(10,15);
    .
    .
    .
    .
    this.panal.Controls.Add(pBox);
}

现在我想用另一种方法改变图片框的位置。问题是我现在如何访问图片框以便更改它们的位置。我尝试使用以下内容,但并不成功。

foreach (Control p in panal.Controls)
                if (p.GetType == PictureBox)
                   p.Location.X = 50;

但是有一个错误。错误是:

System.Windows.Forms.PictureBox' is a 'type' but is used like a 'variable'
4

7 回答 7

22

本节中似乎有一些拼写错误(并且可能是一个真正的错误)。

foreach (Control p in panal.Controls)
                if (p.GetType == PictureBox.)
                   p.Location.X = 50;

错别字是

  1. PictureBox 后跟一个句点 (.)
  2. GetType 缺少括号(因此未调用)。

错误是:

  • 不能将p的类型与 PictureBox 进行比较,需要将其与 PictureBox 的类型进行比较。

这应该是:

foreach (Control p in panal.Controls)
   if (p.GetType() == typeof(PictureBox))
      p.Location = new Point(50, p.Location.Y);

或者简单地说:

foreach (Control p in panal.Controls)
   if (p is PictureBox)
      p.Location = new Point(50, p.Location.Y);
于 2009-08-11T13:24:54.727 回答
4

试试这个:

foreach (Control p in panal.Controls)
{
    if (p is PictureBox)
    {
        p.Left = 50;
    }
}
于 2009-08-11T14:03:01.433 回答
1

接下来,您的 for 循环中可能存在一些错误。

foreach (Control p in panel.Controls)
{
  if (p is PictureBox) // Use the keyword is to see if P is type of Picturebox
  {
     p.Location.X = 50;
  }
}
于 2009-08-11T13:26:19.093 回答
1

我认为

foreach (PictureBox p in panel.Controls.OfType<PictureBox>())
        {
            p.Location = new Point(50, p.Location.Y);
        }

也可能是解决方案。

于 2017-02-14T23:38:50.363 回答
0

你不想

panel.Controls
 //^ this is an 'e'

代替

panal.Controls?
 //^ this is an 'a'
于 2009-08-11T13:22:06.010 回答
0

在您的第二个块中,p.GetType == PictureBox 之后的句点是错误的(此处不需要句点)......就此而言,GetType 是一种方法/函数而不是属性,因此它需要是 p.GetType()

于 2009-08-11T13:23:31.873 回答
0

您最好将图片框设置为表单本身的私有变量,这样您就可以使用它进行操作,而不必每次都通过面板的控件。

于 2009-08-11T13:32:51.067 回答