2011-09-23 79 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