2013-05-27 46 views
0

我正在制作图像查看器。但是我不知道如何在文件夹中设置文件的编号。 我必须设置CurrentImage编号。我描述的功能是Prev和Next按钮。如何在C#文件夹中设置文件的编号

protected FileInfo [] imageFiles;

protected 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(); 
     } 
    } 

回答

0

尝试使用过滤器*.*调用GetFiles。 GetFiles将Directory中的所有文件返回到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(); 
      } 
     } 
相关问题