2013-10-26 3 views
0

Ранее я задал вопрос об обнаружении, была ли выбрана шахматная фигура. Я был представлен в массивы, и теперь выбор работает так, как я хочу, кроме того, что я не могу изменить цвет.Попытка изменить цвет в массиве

public static Color[] pieceColo = new Color[4] 
    { PawnBl1Col, PawnBl2Col, PawnBl3Col, PawnBl4Col}; 

Это массив фиксации Im вверх, PawnBl1Col объявлен белый (наряду со всеми другими значениями)

if (movement.pieceLocX[movement.pLvalX] <= movement.mouseCord.X 
&& movement.pieceLocX[movement.pLvalX] + 100 >= movement.mouseCord.X 
&& movement.pieceLocY[movement.pLvalY] <= movement.mouseCord.Y 
&& movement.pieceLocY[movement.pLvalY] + 100 >= movement.mouseCord.Y) 
    movement.pieceColo[movement.pLvalX] = Color.Red;  

При выполнении если заявление работает нормально, но когда дело доходит до выполнения своей команды он терпит неудачу и ничего не делает.

movement.PawnBl1Col = Color.Red; 

Однако, если я заменил цветную матрицу выше, он будет работать без проблем.

Редактировать: Забыл большую часть movement.pLvalX - это целое число, совпадающее с каждым объектом. Он проверяет все 8 значений (будет 32). Если объект X выбран, то объект X меняет цвет, Im не уверен, что это имеет смысл. Но даже тестирование цветного массива с 0-3 не работает.

ответ

1

В вашем чертежном коде я предполагаю, что вы используете movement.PawnBl1Col в качестве цвета для рисования?

Оператор movement.pieceColo[movement.pLvalX] = Color.Red; не меняет значение переменной movement.PawnBl1Col. Он фактически заменяет запись в массиве Color.Red.

Цвет - тип значения. Единственный способ использования такого массива будет работать, если он содержит ссылочные типы. Это немного неопрятно, но вы могли бы попробовать что-то вроде этого:

public class MyColor 
{ 
    public MyColor(Color color) 
    { 
     this.Color = color; 
    } 

    public Color Color { get; set; } 
} 

Используйте этот MyColor тип для ваших переменных (PawnBl1Col, PawnBl2Col, PawnBl3Col, PawnBl4Col) и изменить массив ...

public static MyColor[] pieceColo = new MyColor[4] { PawnBl1Col, PawnBl2Col, PawnBl3Col, PawnBl4Col }; 

Тогда вы должны быть в состоянии сделайте это:

movement.pieceColo[movement.pLvalX].Color = Color.Red; 

И используйте код movement.PawnBl1Col.Color в вашем коде чертежа.

+0

Спасибо, но он не работает, поскольку значения считаются нулевыми. Мне нужно, чтобы оно по умолчанию было белым, а затем менялось на красный. Я чувствую, что должен уметь это выяснить:/ – Ripsaw

+0

Попробуйте изменить MyColor на структуру. Или просто убедитесь, что вы инициализировали любой экземпляр, используя новый MyColor (Color.White) –

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