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 に答える
0

2番目のブロックでは、p.GetType == PictureBoxの後のピリオドが間違っています(ここではピリオドは必要ありません)...さらに言えば、GetTypeはプロパティではなくメソッド/関数であるため、p.GetType()である必要があります。

于 2009-08-11T13:23:31.873 に答える
0

したくないですか

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

それ以外の

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