1

マップ(マップのすべてのポイントに関する情報を含む.txtファイル)を作成し、ロードして描画できる、ある程度完全なアプリケーションを作成しました。

これに対する私の解決策は、Windowsフォームアプリケーション内に、ポイントを表すパネル(マップ上を移動できる必要があるため)とそのパネルの画像ボックス内(背景画像と画像を配置したいため)を配置することでした。サイズ50x50ピクセルのマップの。私が今直面している問題は、画像を画像ボックスにロードしているため、アプリケーションのロード時間が長くなることです...

誰かが私が試みていることに代わる提案がありますか?視覚的表現が役立つ場合があります:

注:ここでは、ピクチャーボックスの背景色は1つだけです...

要求に応じたコード:(まあ、その一部)

    private void Load_Map()
    {
        for (int i = Y - 12; i < Y + 12; i++)
        {
            if ((i >= 0) & (i < Int32.Parse(MP.Mheight)))
            {
                string Line = xline[i];
                for (int j = X - 12; j < X + 12; j++)
                {
                    if ((j >= 0) & (j < Int32.Parse(MP.Mwidth)))
                    {
                        int X = i * Int32.Parse(MP.Mwidth) + j;
                        int Z = Int32.Parse(Line[j].ToString());
                        Map_Location[X] = Z;

                        Color H = new Color();
                        Map_Point(j, i, Map_Height(Z, H), 50);
                    }
                }
            }
        }
    }

ポイントの作成:

    private void Map_Point(int X, int Y, Color H, int Point_Size)
    {
        PictureBox MP = new PictureBox();
        MP.Name = Map_Coordinates(X, Y);
        MP.Size = new Size(Point_Size, Point_Size);
        MP.Location = new Point(Y * (Point_Size + 1) + 4, X * (Point_Size + 1) + 4);
        MP.BackColor = H;

        Control MW = this.Controls["WorldMap"];
        MW.Controls.Add(MP);

    }
4

2 に答える 2

3

メソッドから派生しSystem.Windows.Forms.ControlてオーバーライドしOnPaint、独自の描画を実行してクリックイベントを自分で処理することにより、カスタムコントロールを作成することをお勧めします。

hWndWinFormsは各コントロールのオブジェクトを作成し、残念ながらWinFormsはあまり適切にスケーリングされないため、多数のWinFormsコントロールを使用することは苦痛の練習です。

于 2013-03-25T18:26:42.437 に答える
1

使用する必要がありますSystem.Drawing.Graphics

これがMSDNチュートリアルです。

DrawImageピクチャーボックスの代わりに使用できる、というメソッドがあります。グリッドの場合、グリッドを作成するために、背景の色と垂直/水平線を使用して長方形として描画する必要があります。

于 2013-03-25T18:25:10.343 に答える