2013-03-25 73 views
1

我創建了一個有點完整的應用程序,它允許我創建一個地圖(帶有關於地圖所有點信息的.txt文件),加載它並繪製它。地圖製作應用程序

我的解決方案是,在Windows窗體應用程序中,放置一個面板(因爲我需要能夠在地圖上移動)和麪板的pictureboxes(因爲我想把一個背景圖像和圖像)代表大小爲50x50像素的地圖點。我現在面臨的問題是增加我的應用程序加載時間,因爲我正在將圖片加載到圖片框中...

有沒有人有任何替代的建議,我一直在嘗試? 視覺表現可能會有所幫助:

NOTE: Pictureboxes only have background color here...

的代碼,如要求:(當然,它的一些)

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); 

    } 
+0

你介意分享你正在用來將圖片加載到圖片框中的代碼嗎?不知道你已經嘗試了什麼,很難提供替代解決方案。 – tnw 2013-03-25 18:25:19

+0

'有沒有人對我一直在嘗試的東西有其他建議?' - 是的,切換到WPF。 winforms太慢而且很糟糕,當涉及到任何圖形密集型的事情時,需要一堆黑客。 – 2013-03-25 18:25:43

+0

tnw有很多的代碼,但我肯定會分享... @HighCore我會研究它:) – 2013-03-25 18:31:39

回答

3

通過派生自System.Windows.Forms.Control並重寫OnPaint方法並自行完成繪圖和處理點擊事件,您將會更好地創建自定義控件。

使用大量的WinForms控件你所做的事情是一個痛苦的練習,因爲WinForms將爲每個控件創建一個hWnd對象,而且不幸的是WinForms不能很好地縮放。

+0

對於'WinForms不能很好地擴展'。 winforms甚至沒有規模。 – 2013-03-25 18:27:33

+0

我看到了,也許有關於此的更多信息?或者我應該自己尋找指南? :P – 2013-03-25 18:28:24

+0

這種情況真的很糟糕 - WPF非常適合數據綁定,解決方案獨立性和流暢動畫,但受到父級操作系統啓動性能和UI粘性較差的困擾,而WinForms則是Flicker-ville,並且很難生成動畫。爲什麼Microsoft不會發布DirectUI? :( – Dai 2013-03-25 18:29:14

1

您應該使用System.Drawing.Graphics

這裏是th e MSDN Tutorials

它有一個名爲DrawImage的方法,您可以使用它來代替圖片框。對於網格,您應該將其繪製爲具有背景顏色和垂直/水平線的矩形以製作網格。

+0

網格只是圖像之間的空白空間,我會看看教程,但更重要的是,我可以繪製在頂部的創建圖像,一旦我這樣做? – 2013-03-25 18:29:27

相關問題