1

こんにちは、C# で簡単な画像ビューアを作成しています。最初のボタンには「開く」を含む 3 つのボタンがあり、最後の 2 つのボタンは「戻る」と「次へ」と画像ボックスです。OpenFileDialog を使用して [開く] ボタンを使用しました。OpenFiledialog のコードは次のとおりです。

 private void openButton_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "JPEG|*.jpg|Bitmaps|*.bmp";

        if(openFileDialog.ShowDialog()== DialogResult.OK)
        {
            pictureBox1.Image = Bitmap.FromFile(openFileDialog.FileName);
        }
    }

これは、「次へと戻る」ボタンでどのコードを使用できるかわかりません。私はそれがループしていることを知っています。助けが必要です、みんなありがとう..

4

3 に答える 3

3

ある種のファイルの列挙が必要です。1 つの方法は、ユーザーがOpenFileDialog.Multiselectプロパティで複数のファイルを選択できるようにすることです。OpenFileDialog選択したすべてのファイル名を含むプロパティ Files を公開します。

class MyPictureViewer
{
   protected string[] pFileNames;
   protected int pCurrentImage = -1;

   private void openButton_Click(object sender, EventArgs e)
   {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "JPEG|*.jpg|Bitmaps|*.bmp";

        if(openFileDialog.ShowDialog()== DialogResult.OK)
        {
            pFileNames = openFileDialog.FileNames;
            pCurrentImage=0;
            ShowCurrentImage();
        }
   }

   protected void ShowCurrentImage()
   {
      if(pCurrentImage >= 0 && pCurrentImage < pFileNames.Length-1)
      {
          pictureBox1.Image = Bitmap.FromFile(pFileNames[pCurrentImage]);
      }
   }
}

次のクリックイベントと前のクリックイベントのイベントハンドラーを実装して、境界線をチェックするか (最後の画像に到達したら、それを超えないようにします)、循環します (ユーザーが最後の画像で [次へ] をクリックすると、最初の画像にジャンプします)。 )

void btnNextImage_Click(object sender, EventArgs e)
    {
        ++pCurrentImage;
        //check if this was last image in list
        if(pCurrentImage >= pFileNames.Length)
            pCurrentImage = pFileNames.Length == 0? -1 : 0;//if this was last image, go to first image
        ShowCurrentImage();
    }

void btnPrevImage_Click(object sender, EventArgs e)
    {
        --pCurrentImage;
        //check if this was first image in list
        if (pCurrentImage < 0)
            pCurrentImage = pFileNames.Length == 0 ? -1 : pFileNames.Length -1;//if this was first image, go to last image
        ShowCurrentImage();
    }
于 2012-11-15T08:24:56.673 に答える
2

動作するユーザー制御コードは次のとおりです。新しいウィンドウフォームアプリケーションを作成し、MyPictureViewerというユーザーコントロールを作成する必要があります。このコントロールにpictureBoxと3つのボタンを追加します。以下のコードをこのユーザーコントロールコードビハインドに貼り付け、クリックイベントをフックして、このコントロールをメインフォームに追加します。お役に立てれば

public partial class MyPictureViewer : UserControl
{
    protected string[] pFileNames;
    protected int pCurrentImage = -1;

    public MyPictureViewer()
    {
        InitializeComponent();
    }

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

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

    private void openButton_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Multiselect = true;
        openFileDialog.Filter = "JPEG|*.jpg|Bitmaps|*.bmp";

        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            pFileNames = openFileDialog.FileNames;
            pCurrentImage = 0;
            ShowCurrentImage();
        }
    }

    protected void ShowCurrentImage()
    {
        if (pCurrentImage >= 0 && pCurrentImage <= pFileNames.Length - 1)
        {
            pictureBox1.Image = Bitmap.FromFile(pFileNames[pCurrentImage]);
        }
    }
}
于 2012-11-15T09:22:19.293 に答える