2013-03-13 3 views
0

Я разрабатываю небольшую игру с использованием оконных форм, в которых есть 5 ярлыков, каждый набор которых похож на изображение кости (1 - 6) от указанного имиджа. Игра сделана «свернутой» 3 раза, в конце броска вы можете выбрать ярлыки НЕ, чтобы их свернули, изменив их цвет фона. В конце каждого рулона рассчитывается и отображается сумма матричных граней.Imagelist всегда возвращает -1

Теперь проблема ...

Я знаю, что мои метки могут достигнуть ImageList как «отбрасывания» функции костей работает очень хорошо. Каждая метка задается для запуска через событие таймера, которое будет происходить 10 раз, в котором случайные изображения выбираются из imagelist, создавая иллюзию прокатки костей. Однако, когда я хочу ДОБАВИТЬ общее количество матриц в конце цикла прокатки с использованием индекса имиджа, каждый индекс возвращает -1. Обратите внимание, что индекс каждой соответствующей матрицы меньше, чем размер матрицы. Точно так же, если у вас есть копия, похожая на одну, индекс будет равен нулю. Я учитываю это, добавляя 1 к индексу. Итак ... хотя у меня может быть 5,5,6,4,3 - мой счетчик счетчиков равен 0, а не 23. 23.

Почему индекс imgaelist дает значение -1, когда самый низкий доступ индекс равен 0?

Вот мой код. Фактический расчет суммы грани штампа производится в инструкции else. Я установил m_iScore (счетчик счетчика) на ноль перед оценкой суммы, потому что я хочу, чтобы сумма была репрезентативной для граней после КАЖДОГО рулона.

private void timer1_Tick(object sender, EventArgs e) 
     { 
      Label[] labelArray = new Label[] { label1, label2, label3, label4, label5 }; 
      Random randnum = new Random(); 
      if (m_iAnimations < 10) 
      { 
       for (int iCount = 0; iCount < labelArray.Length; iCount++) 
       { 
        if ((labelArray[iCount]).BackColor == Color.Lime) 
        { 
         (labelArray[iCount]).Image = imageList1.Images[randnum.Next(0, 6)]; 
        } 
       } 
       m_iAnimations++; 
      } 
      else 
      { 
       timer1.Enabled = false; 
       m_iAnimations = 0; 
       m_iScore = 0; 
       for (int iCount = 0; iCount < labelArray.Length; iCount++) 
       { 
        m_iScore = m_iScore + ((labelArray[iCount]).ImageIndex + 1); 
       } 
       scoreval.Text = m_iScore.ToString(); 
      } 

     } 

Если я не добавлю 1 к индексу изображения, scoreval.Text показывает -5.

ответ

1

Недвижимость Image не изменяет свойства ImageIndex - они более или менее полностью не связаны.

В целом, пользовательский интерфейс должен дисплей состояние программы, а не hold it. Выполняйте все ваши вычисления, затем подталкивайте результаты этого вычисления в пользовательский интерфейс; не используйте элементы интерфейса, как если бы они были переменными.

Смежные вопросы