开发者

Windows Form code not executing?

Ok, I've got a weird one here. I'm trying to make a basic tile engine using a windows form, but some of my code is just...not happening. I'll post the chunks in question.

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

This should be called when the form loads, right? The code dives into LoadImageList(), which contains:

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

The bitmap loads correctly, but then the entire MapEditor_Load method just stops working. tileCount seems to be a local variable in the debugger, and its value is 0, but the debugger never executes the breakpoint on the line which it is assigned. I have absolutely no idea why it would do this, and it's driving me nuts. Any help? Oh, I put the bitmap load in a try/catch block just to see if it was handling an exception in a weird way, but I had no luck. It's not throwing an exception. I began having this problem 开发者_JS百科immediately after replacing my IndoorTileSet with an updated version. I've tried a clean rebuild, with no success.

I read something about a person having a similar problem, who wound up having to declare something as an Instance of a class, but the post wasn't detailed enough for me to know if that's where I'm going wrong, or what I might have to declare as an Instance for it to work...or what an Instance even means, really.


I'm not sure about the code in LoadImageList() method but I suggest you to use BackgroundWorker or Control.Invoke to make your application more responsive.


Try this :

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


The problem is, superficially, that my Bitmap code is throwing an FileNotFound exception, which means I've got a bad filepath. I can handle that. The issue of the program not actually throwing exceptions, and seeming to ignore code, is an issue with 64-bit operating systems not being able to handle exception calls in all instances. The details, and a link to a hotfix to solve the issue, can be found at this site.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜