1

我创建了一个有点完整的应用程序,它允许我创建一个地图(.txt 文件,其中包含有关地图所有点的信息)、加载它并绘制它。

我对此的解决方案是,在 windows 窗体应用程序中,放置一个面板(因为我需要能够在地图上移动)和该面板图片框(因为我想在它们上放置背景图像和图像)代表点大小为 50x50 像素的地图。我现在面临的问题是我的应用程序的加载时间增加了,因为我正在将图片加载到图片框中......

有人对我一直在尝试的事情有任何替代建议吗?视觉表示可能会有所帮助:

注意:图片框在这里只有背景颜色...

代码,按要求:(嗯,其中一些)

    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方法并自己进行绘图和处理单击事件来创建自定义控件。

以您的方式使用大量 WinForms 控件是一种痛苦的练习,因为 WinForms 将为hWnd每个控件创建一个对象,不幸的是,WinForms 不能很好地扩展。

于 2013-03-25T18:26:42.437 回答
1

你应该使用System.Drawing.Graphics

这是它的MSDN 教程

它有一个名为 的方法DrawImage,您可以使用它来代替图片框。对于网格,您应该将其绘制为具有背景颜色和垂直/水平线以构成网格的矩形。

于 2013-03-25T18:25:10.343 回答