Ler*_*ica 3 c# visual-studio-2010 winforms
我有一个Windows Form只包含buttons.最后的目标是制作一个我看过的简单逻辑游戏,但现在问题是我想在New单击按钮时执行不同的操作,但现在它是buttons表单中所有部分的一部分,因此有时会对他执行操作也不应该发生.为了清楚自己,我有两个截图:

所以这就是我想要它的方式 - 我有一个矩阵 - 3x3(在这种情况下,最后它可以NxN).通过点击New我希望能够做各种各样的事情,其中一个是使N按钮变成红色.现在发生的事情有时我的New按钮也会被绘制,因为我按下这样的按钮:
foreach (Control c in this.Controls)
{
if (c is Button)
{
...
Run Code Online (Sandbox Code Playgroud)
因此有时也会New被选中,所以我最终得到了这个:

我现在想的只是在我需要的时候在代码中执行检查并New明确地排除我的按钮,但我不认为这是一个好方法,因为我可能会在很多地方做一个代码来做这件事.我的程序在这种情况下什么是正确的解决方案?如果需要一些代码,请询问.
小智 7
而不是循环控件,将所有矩阵按钮添加到列表中,并将new按钮分开:
private Button[] buttons;
private Button newButton;
Run Code Online (Sandbox Code Playgroud)
现在您可以根据需要添加任意数量的按钮:
for (int i = 0; i < 9; i++)
{
buttons[i] = new Button();
buttons[i].Text = "Button" + i;
Controls.Add(buttons[i])
}
Run Code Online (Sandbox Code Playgroud)
最后,您的New按钮将循环buttons:
private void newButton_Click(object sender, EventArgs e)
{
foreach (Button b in buttons)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
可能最简单的解决方案是将Grid放在自己的Panel(pnlGrid)中.将所有按钮放在那里,然后您可以执行以下操作:
foreach (Control ctl in pnlGrid.Controls) {
if (ctl is Button) {
// Do your logic here
}
}
Run Code Online (Sandbox Code Playgroud)