c # «возврат» не завершает событие «Нажатие кнопки» и запускает таймер

1

Извините, если этот вопрос слишком элементарный. Я пытаюсь сортировать репликацию соответствующего учебника игры

http://msdn.microsoft.com/en-us/library/dd553234.aspx

Но я использую настраиваемые кнопки (названные карты), чтобы показывать изображения. Карта имеет два изображения (назад, спереди). Назад идентична для всех карт, "фронт" - это изображение случайно назначенного изображения. Настройка изображения на задний план скрывает случайное изображение, и перед ним открывается его. Если два последовательных щелчка имеют одинаковый вид изображения (совпадение), я хочу, чтобы событие клика закончилось без запуска таймера, но кажется, что таймер запускается в любом случае. Вот код в кнопке Click event. Я попытался использовать firstClicked.front вместо firstClicked.Image в if(), но ничего не работает. благодаря

private void card_Click(object sender, EventArgs e)
    {
         if (timer1.Enabled == true)
            return;

        Card clickedCard = sender as Card;


        if (clickedCard != null) 
        {

            if (clickedCard.Image == clickedCard.front) //ingore Clicks on already revealed cared
                return;



            if (firstClicked == null)
            {
                firstClicked = clickedCard;
                firstClicked.Image = firstClicked.front;

                return;
            }
            //Clicked card is second card

            secondClicked = clickedCard;
            secondClicked.Image = secondClicked.front;



            if (firstClicked.Image == secondClicked.Image)
            {
                firstClicked = null;
                secondClicked = null;
                    return;
            }


            timer1.Start();

        }
 }
  • 0
    Отладка вашего кода. Вы вводите последний, если?
  • 1
    Где отладчик говорит, что это не удалось?
Показать ещё 9 комментариев
Теги:
timer
return

2 ответа

0
Лучший ответ

@Адриан. Как вы сказали, я понимаю, что сравниваю объекты, а не изображения. Я включил идентификатор в кнопки, чтобы два изображения с похожим изображением имели одинаковые идентификаторы. Затем вместо сравнения изображений я использовал id и решил его.

0

Мое предположение заключается в том, что clickedCard.Image имеет тип System.Drawing.Image в этом случае сравнение изображений с помощью clickedCard.Image == clickedCard.front просто не работает. Это связано с тем, что эта операция не будет фактически сравнивать содержимое изображений, а вместо них объекты, которые их представляют. В С# существуют различные способы сравнения объекта, о котором вы можете прочитать больше в этой статье, в котором объясняется сравнение объектов более подробно, чем то, что делает учебник, который вы используете.

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню