0

現在、画像ビューアを作成中です。ただし、フォルダにファイルの番号を設定する方法がわかりません。CurrentImage 番号を設定する必要があります。私が説明する機能は、Prev および Next ボタンです。

保護された FileInfo[] imageFiles;

保護された int pCurrentImage ;

 private void btnFileOpen_Click(object sender, EventArgs e)
    {
        OpenFileDialog dlg = new OpenFileDialog();
        dlg.Filter = "이미지 파일|*.jpg;*.bmp;*.gif;*.png";

        if (dlg.ShowDialog() == DialogResult.OK)
        {
            Bitmap b = new Bitmap(dlg.FileName);
            pictureBox1.Image = (Image)b.Clone();
            pCurrentImage = 0;

            DirectoryInfo di = new DirectoryInfo(dlg.FileName.Replace(dlg.SafeFileName, ""));

            imageFiles = di.GetFiles("*.jpg;*.bmp;*.gif;*.png");

        }
    } 
   private void btnBefore_Click(object sender, EventArgs e)
    {
                    --pCurrentImage;
        if (imageFiles.Length > 0)
        {
            pCurrentImage = pCurrentImage == 0 ? imageFiles.Length - 1 : --pCurrentImage;
            ShowCurrentImage();
        }

    }

    private void ShowCurrentImage()
    {
         if (pCurrentImage >= 0 && pCurrentImage <= imageFiles.Length - 1)
        {
            pictureBox1.Image = Bitmap.FromFile(imageFiles[pCurrentImage].FullName);
            //Invalidate();
            pictureBox1.Invalidate();
        }
    }


    private void btnNext_Click(object sender, EventArgs e)
    {
        ++pCurrentImage;
        if (imageFiles.Length > 0)
        {
            pCurrentImage = pCurrentImage == imageFiles.Length - 1 ? 0 : ++pCurrentImage;
            ShowCurrentImage();
        }
    }
4

1 に答える 1

0

filter で GetFiles を呼び出してみてください*.*。GetFiles は、ディレクトリ内のすべてのファイルを FileInfo[] 配列に返します。これで、LINQ クエリを使用して結果をフィルター処理できます。

        FileInfo fi = new FileInfo(dlg.FileName);
        var list = fi.Directory.GetFiles("*.*",SearchOption.TopDirectoryOnly);
        imageFiles = (from FileInfo file in list where (file.Extension == ".jpg" || file.Extension == ".bmp" || file.Extension == ".gif" || file.Extension == ".png") select file).ToArray();

CurrentImage番号を取得する方法は?

pCurrentImage = imageFiles.ToList().FindIndex(file => file.FullName == dlg.FileName);

また、正しい btnBefore_Click および btnNext_Click ボタンの処理を覚えていないでください。

private void btnBefore_Click(object sender, EventArgs e)
{
    --pCurrentImage;
    if (imageFiles.Length > 0)
    {
        pCurrentImage = pCurrentImage < 0 ? imageFiles.Length - 1 : pCurrentImage;
        ShowCurrentImage();
    }
}       

 private void btnNext_Click(object sender, EventArgs e)
        {
            ++pCurrentImage;
            if (imageFiles.Length > 0)
            {
                pCurrentImage = pCurrentImage >= imageFiles.Length ? 0 : pCurrentImage;
                ShowCurrentImage();
            }
        }
于 2013-05-27T14:05:25.477 に答える