C# 地图制作应用程序

C# 地图制作应用程序,c#,C#,我已经创建了一个比较完整的应用程序,它允许我创建一个map.txt文件,其中包含关于地图所有点的信息,加载并绘制地图 我的解决方案是,在windows窗体应用程序中,放置一个面板,因为我需要能够在地图上移动,并且在该面板中显示图片。因此,我希望在这些面板上放置一个背景图像和一个以50x50像素表示地图点的图像。我现在面临的问题是我的应用程序加载时间增加,因为我正在将图片加载到pictureboxes 除了我一直在尝试的东西,有人有其他的建议吗? 视觉表现可能有助于: 代码,按照要求:好吧,其中的

我已经创建了一个比较完整的应用程序,它允许我创建一个map.txt文件,其中包含关于地图所有点的信息,加载并绘制地图

我的解决方案是,在windows窗体应用程序中,放置一个面板,因为我需要能够在地图上移动,并且在该面板中显示图片。因此,我希望在这些面板上放置一个背景图像和一个以50x50像素表示地图点的图像。我现在面临的问题是我的应用程序加载时间增加,因为我正在将图片加载到pictureboxes

除了我一直在尝试的东西,有人有其他的建议吗? 视觉表现可能有助于:

代码,按照要求:好吧,其中的一部分

    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);
                    }
                }
            }
        }
    }
您应该使用System.Drawing.Graphics

这是它的基本原理

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

您应该使用System.drawing.Graphics

这是它的基本原理


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

您最好通过从System.Windows.Forms.control派生并重写OnPaint方法,自己绘制并处理单击事件来创建自定义控件


使用大量WinForms控件的方式是一个痛苦的练习,因为WinForms会为每个控件创建一个hWnd对象,WinForms的伸缩性不太好,不幸的是。

您最好通过从System.Windows.Forms.control派生并重写OnPaint方法,自己绘制并处理单击事件来创建自定义控件


不幸的是,使用大量WinForms控件是一项痛苦的练习,因为WinForms会为每个控件创建一个hWnd对象,WinForms的伸缩性也不太好。

您是否介意分享将图片加载到图片框中的代码?在不知道您已经尝试了什么的情况下,很难提供替代解决方案。对于我所尝试的,有人有其他建议吗?-是的,我知道,切换到WPF。winforms太慢了,太蹩脚了,在做任何图形密集型的事情时都需要大量的技巧。tnw有很多代码,但我肯定会与大家分享@HighCore我会研究一下:你介意分享你用来将图片加载到图片框中的代码吗?在不知道您已经尝试了什么的情况下,很难提供替代解决方案。对于我所尝试的,有人有其他建议吗?-是的,我知道,切换到WPF。winforms太慢了,太蹩脚了,在做任何图形密集型的事情时都需要大量的技巧。tnw有很多代码,但我肯定会与大家分享@HighCore我将研究它:+1,因为WinForms的伸缩性不太好。winforms甚至不能扩展。我明白了,也许有更多关于这个的信息?还是我自己去找导游p这种情况真的很糟糕-WPF对于数据绑定、分辨率独立性和流畅的动画效果都很好,但是启动性能和与父操作系统的UI一致性都很差,而WinForms是闪烁的,动画制作很痛苦。为什么Microsoft不发布DirectUI?:@Dai我不知道你所说的UI内聚性和所有这些东西是什么意思,但几天前我看到一个人发布了一个关于10k x 10k大小的WPF应用程序的答案,该应用程序有数千个支持鼠标和触摸的控件。这是一个飞机驾驶舱模拟器。@AntonioTehSumtin这不是我所说的规模——在这种情况下,规模指的是平台或框架处理大量数据或实例的能力。具体来说,如果你想在一个表单中有100多个控件,WinForms往往会阻塞,而非常嵌套的控件也不能很好地发挥作用。WinForms的+1不能很好地扩展。winforms甚至不能扩展。我明白了,也许有更多关于这个的信息?还是我自己去找导游p这种情况真的很糟糕-WPF对于数据绑定、分辨率独立性和流畅的动画效果都很好,但是启动性能和与父操作系统的UI一致性都很差,而WinForms是闪烁的,动画制作很痛苦。为什么Microsoft不发布DirectUI?:@Dai我不知道你所说的UI内聚性和所有这些东西是什么意思,但几天前我看到一个人发布了一个关于10k x 10k大小的WPF应用程序的答案,该应用程序有数千个支持鼠标和触摸的控件。这是一个飞机驾驶舱模拟器。@AntonioTehSumtin这不是我所说的规模——在这种情况下,规模指的是平台或框架处理大量数据或实例的能力。尤其是温特
o如果你想在一个窗体中有100多个控件,而嵌套的控件也不能很好地发挥作用。网格只是图像之间的一个空白区域,我将查看教程,但更重要的是,一旦我这样做了,我能在创建的图像上绘制吗?网格只是图像之间的一个空白区域,我将研究教程,但更重要的是,一旦我这样做了,我可以在创建的图像上画图吗?
    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);

    }