2011-09-23 93 views
0

好吧,我在這裏有一個奇怪的。我正在嘗試使用Windows窗體來創建基本的圖塊引擎,但是我的一些代碼只是......沒有發生。我會發布有問題的塊。Windows窗體代碼沒有執行?

private void MapEditor_Load(object sender, EventArgs e) 
    { 
     LoadImageList(); 
     FixScrollBarScales(); 
     cboCodeValues.Items.Clear(); 
     cboCodeValues.Items.Add("ENEMY"); 
     cboCodeValues.Items.Add("CHEST"); 
     cboCodeValues.Items.Add("NPC"); 

     for (int x = 0; x < 100; x++) 
      cboMapNumber.Items.Add(x.ToString().PadLeft(3, '0')); 

     cboMapNumber.SelectedIndex = 0; 
     TileMap.EditorMode = true; 
     backgroundToolStripMenuItem.Checked = true; 
    } 

這應該在窗體加載時調用,對嗎?代碼潛入LoadImageList(),其中包含:

private void LoadImageList() 
{ 
    string filepath = Application.StartupPath + 
     @"\Content\Textures\IndoorTileSet.png"; 
    Bitmap tileSheet = new Bitmap(filepath); 
    int tilecount = 0; 
    for(int y = 0; y < tileSheet.Height/TileMap.TileHeight; y++) 
    { 
     for(int x = 0; x < tileSheet.Width/TileMap.TileWidth; x++) 
     { 
      Bitmap newBitmap = tileSheet.Clone(
       new System.Drawing.Rectangle(
         x * TileMap.TileWidth, 
         y * TileMap.TileHeight, 
         TileMap.TileWidth, 
         TileMap.TileHeight), 
       System.Drawing.Imaging.PixelFormat.DontCare); 
      imgListTiles.Images.Add(newBitmap); 
      string itemName = ""; 
      if(tilecount == 0) 
       itemName = "Empty"; 
      if(tilecount == 1) 
       itemName = "Floor"; 
      listTiles.Items.Add(new ListViewItem(itemName, tilecount++)); 
     } 
    } 
} 

位圖加載正確,但隨後的整個MapEditor_Load方法只是停止工作。 tileCount似乎是調試器中的局部變量,其值爲0,但調試器從不在執行分配的行上執行斷點。我完全不知道爲什麼它會這樣做,而且這讓我感到瘋狂。任何幫助? 哦,我把位圖加載到try/catch塊中,看看它是否以奇怪的方式處理異常,但我沒有運氣。它不會拋出異常。用更新後的版本替換我的IndoorTileSet後,我立即開始出現此問題。我嘗試了一次徹底的重建,但沒有成功。

我讀了一些關於具有類似問題的人的東西,他們不得不聲明某些東西是一個類的實例,但是這篇文章不夠詳細,不知道我是否會出錯,或者我可能需要聲明的實例才能工作......或者實例甚至意味着什麼,真的。

+0

順便說一下,看看'Path.Combine',以確保你不會搞亂那個文件路徑。 – MPelletier

+0

否則,如果您將斷點放在LoadImageList的第一行,您是否可以逐行執行? – MPelletier

+0

我會檢查補丁,謝謝你的建議。我可以遍歷LoadImageList,但它在我提到的那些行之前跳出了方法。我問過問題的其他人提到它可能是64位操作系統的問題。我會在下面發表他們的建議。 – TimBKJ

回答

0

我不確定LoadImageList()方法中的代碼,但我建議您使用BackgroundWorkerControl.Invoke以使您的應用程序更具響應能力。

+0

我會記住這個建議,我可以看到這些東西會有幫助。我只是無法弄清楚爲什麼我的代碼不會發生。這可能是多線程可以避免的資源衝突嗎? – TimBKJ

0

試試這個:

Bitmap tileSheet = (Bitmap)Bitmap.FromFile(filepath); 
+0

這似乎沒有任何效果。 – TimBKJ

0

的問題是,從表面上看,我的位圖的代碼拋出FileNotFound異常,這意味着我有一個壞的文件路徑。我可以處理。程序問題實際上並沒有拋出異常,並且似乎忽略了代碼,這是64位操作系統在所有情況下都無法處理異常調用的問題。有關詳細信息以及指向修補程序以解決問題的鏈接,請參見this site