Код Windows Form не выполняется? - PullRequest
       0

Код Windows Form не выполняется?

0 голосов
/ 23 сентября 2011

Хорошо, у меня здесь странный вопрос. Я пытаюсь создать базовый движок плиток, используя форму 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 обновленной версией. Я попытался восстановить безуспешно.

Я читал что-то о человеке, имеющем похожую проблему, который столкнулся с необходимостью объявить что-то как экземпляр класса, но пост не был достаточно подробным, чтобы я знал, в этом ли я ошибаюсь, или что мне, возможно, придется объявить Экземпляром для его работы ... или что Экземпляр вообще означает, на самом деле.

Ответы [ 3 ]

0 голосов
/ 23 сентября 2011

Попробуйте это:

Bitmap tileSheet = (Bitmap)Bitmap.FromFile(filepath);
0 голосов
/ 24 сентября 2011

Внешне проблема в том, что мой растровый код вызывает исключение FileNotFound, что означает, что у меня неверный путь к файлу. Я могу справиться с этим. Проблема в том, что программа на самом деле не генерирует исключения и, похоже, игнорирует код, связана с тем, что 64-разрядные операционные системы не могут обрабатывать вызовы исключений во всех случаях. Подробную информацию и ссылку на исправление для решения проблемы можно найти на этом сайте .

0 голосов
/ 23 сентября 2011

Я не уверен насчет кода в методе LoadImageList (), но я предлагаю вам использовать BackgroundWorker или Control.Invoke , чтобы сделать ваше приложение более отзывчивым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...