-2

好的,我用这段代码创建了一个棋盘:

int numBlocks = 8;
Panel[,] chessBoardPanels = new Panel[numBlocks, numBlocks];
for (int iRow = 0; iRow < numBlocks; iRow++)
    for (int iColumn = 0; iColumn < numBlocks; iColumn++)
    {
        Panel p = new Panel();
        //set size
        p.Size = new Size(50, 50);
        //set back colour
        p.BackColor = (iRow + (iColumn % 2)) % 2 == 0 ? Color.Black : Color.White;
        //set location
        p.Location = new Point(50 * iRow, 50 * iColumn);
        chessBoardPanels[iRow, iColumn] = p;
        groupBox1.Controls.Add(p);
    }

当我使用命令时:

 chessBoardPanels[1,1].BackColor=Color.Red;

面板会改变颜色,但是我将如何使用数组创建像鼠标输入这样的事件??????

4

1 回答 1

1

您需要将事件附加到Panel您正在生成的每个对象,这是我正在谈论的粗略示例

for (int iRow = 0; iRow < numBlocks; iRow++)
{
    for (int iColumn = 0; iColumn < numBlocks; iColumn++)
    {
        Panel p = new Panel();

        // set size, position, etc, then:

        p.MouseEnter += (s,e) => { (s as Panel).BackColor=Color.Red; }
        p.MouseLeave += (s,e) => { (s as Panel).BackColor=Color.Black; }

        // the panel is born of this color
        p.BackColor = Color.Black; // .. or any color you put in MouseLeave
        groupBox1.Controls.Add(p);  
    }
}

每个Panel都有自己的处理程序,用于鼠标以这种方式进入/退出,并且可以处理。

于 2013-09-11T14:27:11.650 回答