1

pictureBox では一度に 1 つの画像しか表示できないことはわかっています。コレクション内の各画像に対して pictureBox を作成しようとしています。たとえば、List に 10 個の画像がある場合、メソッドはそれぞれの画像に対して 10 個の pictureBox を作成し、それぞれが pictureBox に表示されるようにする必要があります。代わりに for ループと foreach ループのどちらが良いかわかりません。ループが両方の変数 XCoordinate と YCoordinate をインクリメントするたびに、PictireBox の位置が増加し、PictureBox がフォーム内で互いに重ならないようにする必要があります。このメソッドの理由は、アプリケーションが実行されるたびにコレクション内の画像の数が変わる可能性があるためです。そのため、手動で作成していません。そのため、リスト内のすべての画像がpicture.Boxに表示されるはずです。ボックスはすべて同じサイズである必要があります。唯一の違いは、フォーム上の位置と、複数のピクチャ ボックスを作成するフォーム内の画像です。助けてください、私は感謝します

http://imageshack.us/photo/my-images/41/59536200.png/のように見えるはずです。私が取り組んでいるコードに感謝しますsoltion 大きな助けになります。

public List<Image> returnImagesInList()
{
   return this.images;
}



private void createPictureBoxesForImages()
{

        foreach (Image file in  retrurnImagesInList())
        {
            try
            {
                int XCoordinate = 10;
                XCoordinate++;
                int YCoordinate = 5;
                YCoordinate++;
                PictureBox imageControl = new PictureBox();
                imageControl.Height = 100;
                imageControl.Width = 100;

                imageControl.Visible = true;
                imageControl.Location = new Point(XCoordinate, YCoordinate);
                Controls.Add(imageControl);
                imageControl.Image = file;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
}
4

1 に答える 1

1

各ピクチャーボックスのx座標とy座標で1つだけインクリメントし、pictureobxの幅と高さ以上である必要があります。反復で同じ値で座標を初期化し、開始した場所に戻します。

初期化をサイドループから外し、幅よりも大きな増分を与える必要があります。ピクチャーボックスがフォームの右端に達したときにy座標をインクリメントする必要があります。

int XCoordinate = 10;
int YCoordinate = 5;
foreach (Image ile in  retrurnImagesInList())
{
    try
    {   
        PictureBox imageControl = new PictureBox();
        imageControl.Height = 100;
        imageControl.Width = 100;
        XCoordinate += imageControl.Width+2;
        if(XCoordinate  > this.Width - imageControl.Width)
        {
            YCoordinate += imageControl.Height + 2;
            XCoordinate = 10;
        }
        imageControl.Visible = true;
        imageControl.Location = new Point(XCoordinate, YCoordinate);
        Controls.Add(imageControl);
        imageControl.Image = file;
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: " + ex.Message);
    }
}
于 2012-12-02T04:32:40.877 に答える