Windows窗体代码没有执行?

时间:2011-09-23 03:56:11

标签: winforms c#-4.0

好的,我在这里有一个奇怪的。我正在尝试使用Windows窗体创建一个基本的tile引擎,但我的一些代码只是......没有发生。我会发布有问题的块。

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后立即开始出现这个问题。我已经尝试过干净的重建,但没有成功。

我读到了一个有类似问题的人的事情,他最后不得不宣称某事是一个班级的实例,但这个帖子不够详细,我不知道这是不是我出错的地方,或者我可能需要声明作为一个实例让它工作......或者实例甚至意味着什么。

3 个答案:

答案 0 :(得分:0)

我不确定LoadImageList()方法中的代码,但我建议您使用BackgroundWorkerControl.Invoke来提高应用程序的响应能力。

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

问题是,从表面上看,我的Bitmap代码抛出了一个FileNotFound异常,这意味着我的文件路径不好。我能解决这个问题。程序实际上没有抛出异常,并且似乎忽略代码的问题是64位操作系统无法在所有实例中处理异常调用的问题。可以在this site找到详细信息以及解决此问题的修补程序链接。