尝试更改数组中的颜色

本文关键字:颜色 数组 | 更新日期: 2023-09-27 18:36:53

我之前问过一个关于检测棋子是否被选中的问题。我被介绍给数组,现在选择正在按照我想要的方式工作,除了我无法更改颜色的事实。

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

这是我修复的数组,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;    

当执行时,if 语句运行良好,但是当它执行其命令时,它会失败并且什么也不做。

movement.PawnBl1Col = Color.Red;

但是,如果我用上面的颜色数组替换它就可以无缝工作。

编辑:忘记了很大一部分movement.pLvalX 只是一个与每个对象重合的整数。它测试所有 8 个值(将为 32)。如果选择了 X 对象,则 X 对象会改变颜色,我不确定这是否有意义。但即使用 0-3 测试颜色数组也不起作用。

尝试更改数组中的颜色

在您的绘图代码中,我假设您使用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