0

81 個の画像ボックスを作成し、それらを互いに一定の距離を置いて自動的に配置しようとしていますが、論理的な順序で配置されていないようです。それらが画面に表示されるようにするには、Xポイントを-1700に初期化する必要があります。次のコードは、必要な最初の 15 個を取得しますが、パターンを継続するのではなく、互いにスタックし始めます。これは約 1 時間の試行錯誤の結果ですが、最初はロジックに問題がないように見えました。設定されている現在のX、Yを表示するメッセージボックスもありましたが、それらの座標に配置しないのは正しいことでした。

int X = -1700;
int Y = 0;

for (int i = 0; i < 81; i++)
{
    this.Controls.Add(championThumbNailsArray[i]);
    championThumbNailsArray[i].Height = 80;
    championThumbNailsArray[i].Width = 80;
    championThumbNailsArray[i].Location = new Point(X, Y);
   // MessageBox.Show(Convert.ToString(X) + "," + Convert.ToString(Y));
    championThumbNailsArray[i].ImageLocation = akali.grabPicture();
    //championThumbNailsArray[i].ImageLocation = championsArray[i].grabPicture();
    if (X <= 425)
        X = X + 85;
    else
    {
        X = -1700;
        Y = Y + 85;
    }                           
}
4

2 に答える 2

1

要素を手動で配置する代わりに、FlowLayoutPanelを使用します。パネルにコントロールを追加し、それがあなたのために配置を行うようにします。

于 2011-09-02T00:31:59.563 に答える
0

このコードは期待どおりに機能します

private void Form1_Load(object sender, EventArgs e)
        {
            int x = 0;
            int y = 0;

            for (int i = 0; i < 81; i++)
            {
                PictureBox p = new PictureBox();
                p.BorderStyle = BorderStyle.Fixed3D;
                p.Height = 80;
                p.Width = 80;
                p.Location = new Point(x, y);

                x += 85;

                if (x > 425)
                {
                    x = 0;
                    y += 85;
                }

                this.Controls.Add(p);
            }

        }

ここに画像の説明を入力

しかし、私は@Edが言ったようなもの、FlowLayoutコントロールを使います

于 2011-09-02T00:39:05.560 に答える