3

私のプログラムには、必要なフォルダの画像を表示する10枚の画像があります。次のボタンと前のボタンを追加すると、ユーザーは次の10枚の写真または最後の10枚の写真を閲覧できます。最初の10枚の画像は正常に表示されますが、次のボタンは、フォルダにちょうど20枚の画像がある場合にのみ機能します。画像が15枚の場合、クラッシュします。これが私のコードです:

PictureBox[] myPicBoxArray = new PictureBox[10];
string path = @"\\Documents\Pictures\Camera";

private void Form1_Load(object sender, EventArgs e)
{
    myPicBoxArray[0] = pictureBox1;
    myPicBoxArray[1] = pictureBox2;
    myPicBoxArray[2] = pictureBox3;
    myPicBoxArray[3] = pictureBox4;
    myPicBoxArray[4] = pictureBox5;
    myPicBoxArray[5] = pictureBox6;
    myPicBoxArray[6] = pictureBox7;
    myPicBoxArray[7] = pictureBox8;
    myPicBoxArray[8] = pictureBox9;
    myPicBoxArray[9] = pictureBox10;
}

//Show button to display first ten pictures
private void showButton_Click(object sender, EventArgs e)
{
    string[] files = Directory.GetFiles(path);
    int i = 0;
    foreach (string ofile in files)
    {
        myPicBoxArray[i].SizeMode = PictureBoxSizeMode.StretchImage;
        myPicBoxArray[i].Image = Image.FromFile(files[i]);

        i++;
        if (i >= 10)
            break;
    }
}

private void nextButton_Click(object sender, EventArgs e)//The problem is here,
{
    DirectoryInfo fileDir = new DirectoryInfo(path);
    while (i2 < 10)
    {
        myPicBoxArray[i2].SizeMode = PictureBoxSizeMode.StretchImage;
        if (i2 + 10 < picArrFileNames.Length)
        {
            myPicBoxArray[i2].Image = Image.FromFile(picArrFileNames[i2 + 10]);
        }
    }
}

前のボタンの手がかりはありません。

4

2 に答える 2

1

制限された配列を使用する代わりに、これらの画像をに格納しImageList、プロパティを使用myImageList.Images.CountしてImageList内の画像の数を数えることができます。
問題は解決しました..:)または、一緒Listsに使用してmyList.Countください。

あなたはこのようなことをすることができます:

   DirectoryInfo dir = new DirectoryInfo(filePath);
   foreach (FileInfo file in dir.GetFiles())
   {               
       this.myImageList.Images.Add(Image.FromFile(file.FullName));
   }
于 2012-11-14T04:12:59.667 に答える
0

なぜあなたがこれをやっつけているのか分かりません:

if (i2 + 10 < picArrFileNames.Length)
  {
      myPicBoxArray[i2].Image = Image.FromFile(picArrFileNames[i2 + 10]);
  }

ただし、カウントの問題についてはこれを試してください。また、以下のMrGreenのアドバイスに従って、システムファイルを回避するためにファイル拡張子のチェックを行ってください。

private void nextButton_Click(object sender, EventArgs e)//The problem is here,
    {
        DirectoryInfo fileDir = new DirectoryInfo(path);
        int count = fileDir.GetFiles().Length;            
        while (i2 < count)
        {
            myPicBoxArray[i2].SizeMode = PictureBoxSizeMode.StretchImage;
            if (i2 + 10 < picArrFileNames.Length)
            {
                myPicBoxArray[i2].Image = Image.FromFile(picArrFileNames[i2 + 10]);
            }                                               
        }            
    }

これをここのどこかのループで拡張チェックに使用しますこれをここのループで拡張チェックに使用します

string e = Path.GetExtension("YourFilePathHere");
if (e == ".jpeg")
{
   //Do your stuff
}
于 2012-11-14T04:50:49.793 に答える