Как получить доступ к элементам управления, который находится на панели в C # - PullRequest
5 голосов
/ 11 августа 2009

Я использую панель в 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);
}

Теперь я хочу изменить расположение Picturebox другим способом. Проблема в том, как теперь я могу получить доступ к картинным коробкам, чтобы изменить их расположение. Я пытаюсь использовать следующее, но это не успех.

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'

Ответы [ 7 ]

20 голосов
/ 11 августа 2009

Возможно, в этом разделе есть некоторые опечатки (и, возможно, настоящая ошибка).

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);
4 голосов
/ 11 августа 2009

Попробуйте это:

foreach (Control p in panal.Controls)
{
    if (p is PictureBox)
    {
        p.Left = 50;
    }
}
1 голос
/ 11 августа 2009

Далее в вашем цикле 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;
  }
}
0 голосов
/ 15 февраля 2017

Я думаю

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

тоже может быть решением.

0 голосов
/ 11 августа 2009

Было бы лучше, если бы picturebox был закрытой переменной самой формы, чтобы вы могли с ней что-то делать, не переходя каждый раз через панель управления.

0 голосов
/ 11 августа 2009

Во втором блоке период после p.GetType == PictureBox неверен (здесь не требуется период) ... в этом отношении GetType - это метод / функция, а не свойство, поэтому он должен быть p.GetType ()

0 голосов
/ 11 августа 2009

Ты не хочешь

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

вместо

panal.Controls?
 //^ this is an 'a'
...