函数未更新按钮。文本c#
我有一个网格的按钮,当他们被点击(在按钮本身内)时,应该会显示一些信息,我正试图为扫雷者编程 网格方法:函数未更新按钮。文本c#,c#,C#,我有一个网格的按钮,当他们被点击(在按钮本身内)时,应该会显示一些信息,我正试图为扫雷者编程 网格方法: public void createGrid() { for (int i = 0; i < 8; i++) { grid[i] = new Cell[8]; for (int j = 0; j < 8; j++) { chance =
public void createGrid()
{
for (int i = 0; i < 8; i++)
{
grid[i] = new Cell[8];
for (int j = 0; j < 8; j++)
{
chance = rand1.Next(0, 6);
if (chance == 0 && bombAmount < 10)
{
grid[i][j] = new Cell(true);
bombAmount++;
}
else
{
grid[i][j] = new Cell();
}
grid[i][j].Name = "grid" + i.ToString() + j.ToString();
grid[i][j].Location = new System.Drawing.Point(i * 49, j * 49);
grid[i][j].Size = new System.Drawing.Size(50, 50);
grid[i][j].TabIndex = 0;
grid[i][j].Font = new System.Drawing.Font("Microsoft Sans Serif", 26.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
}
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j <8; j++)
{
this.Controls.Add(grid[i][j]);
}
}
}
然后是检查邻居是否有炸弹的方法:
public void CheckNeighbours(int cswitch)
{
switch (cswitch)
{
// Left upper corner (i = 0, j = 0)
case 1:
for (int i = 0; i <= 1; i++)
{
for (int j = 0; j < 1; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
// Upper edge (i = 0, 0 < j < 7)
case 2:
for (int i = 0; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
// Right upper corner (i = 0, j = 7)
case 3:
for (int i = 0; i <= 1; i++)
{
for (int j = -1; j <= 0; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
// Right edge (0 < i < 7, j = 7)
case 4:
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 0; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
// Right down corner (i = 7, j = 7)
case 5:
for (int i = -1; i <= 0; i++)
{
for (int j = -1; j <= 0; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
// Bottom edge (i = 7, 0 < j < 7)
case 6:
for (int i = -1; i <= 0; i++)
{
for (int j = -1; j <= 1; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
// Left down corner (i = 7, j = 0)
case 7:
for (int i = -1; i <= 0; i++)
{
for (int j = -1; j <= 1; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
// Left edge (i = 0, 0 < j < 7)
case 8:
for (int i = 0; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
default:
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
if (i == 0 && j == 0) { }
else
{
if (grid[i][j].HasBomb == true)
{
grid[0][0].NeighbourBombCount++;
}
}
}
}
break;
}
}
现在我只需要知道如何从发送方对象获取I和j索引,我就是golden 你需要
cell[i][j].Click += new System.EventHandler(this.CellClick);
并创建一个单CellClick事件处理程序方法调用过
Cell1\u Click
etc吗?如果在调试模式下设置断点?我看不到任何地方您正在将事件连接到事件处理程序。我太傻了。。。。我从不将单击事件指定给自定义函数。我想,您的评论让我走上了正确的轨道,现在要想弄清楚如何将网格[I][j]
分配给Cellx\u单击
您可能只需要一个事件处理程序和一个包含坐标的自定义事件参数。这样,您就可以在初始化时分配它。从那里,您应该能够计算要传递给CheckNeights和RevealCell的值。(后者是不言而喻的)我不知道你能做到,你能进一步解释一下吗?这将立即解决我现在得到的超长代码文件!感觉我们要看你用一系列的问题来写你的扫雷游戏。可悲的是,我们永远不会看到它完成(当它工作时,你不会问任何问题)。您只需要向单元格中添加一个onclick处理程序,EventArgt中的单元格对象将无法工作。它必须是lambda才能使用i,j。所以cell[i][j]。单击+=(发送方,事件参数)=>{CellClick(i,j);}代码>或类似的东西。这看起来很有希望,每当我找到它pm100时,我都会给你发一个到github的链接,指向完成的应用程序。@DaxFohl Nope brain=fried。。。我不知道如何使用1访问I和j部件eventhandler@pm100如前所述,“已完成”应用程序的github链接。但是,由于应用程序中仍存在一些bug,因此有一个待办事项列表:1。对相邻单元格的检查未优化,将对最顶层的行抛出一个错误。相邻的单元没有正确地显示相邻的炸弹,至少在屏幕中央没有显示,不知何故,只有边缘的箱子在正常工作
private void Cell_click(object sender, EventArgs e)
{
e.
if(i == 0 && j == 0)
{
CheckNeighbours(1);
}
if (i == 0 && j > 0 && j < 7)
{
CheckNeighbours(2);
}
if (i == 0 && j == 7)
{
CheckNeighbours(3);
}
if (i > 0 && i < 7 && j == 7)
{
CheckNeighbours(4);
}
if (i == 7 && j == 7)
{
CheckNeighbours(5);
}
if (i == 7 && j > 0 && j < 7)
{
CheckNeighbours(6);
}
if (i == 7 && j == 0)
{
CheckNeighbours(7);
}
if(i > 0 && i < 7 && j == 0)
{
CheckNeighbours(8);
}
RevealCell(i, j);
}
cell[i][j].Click += new System.EventHandler(this.CellClick);