[英]Windows Forms - how to exclude button from the whole set
我有一個只包含buttons
的Windows Form
。 最后的目標是創建一個我看過的簡單邏輯游戲但是現在的問題是我想在單擊“ New
按鈕時執行不同的操作,但現在它是表單中所有buttons
一部分,所以有時會執行一個操作在他身上也不應該發生。 為了清楚自己,我有兩個截圖:
所以這就是我想要的 - 我有一個矩陣 - 3x3(在這種情況下,最后它可以是NxN
)。 通過單擊“ New
我希望能夠執行各種操作,其中一個是使N
按鈕變為紅色。 現在發生的事情有時我的New
按鈕也會被繪制,因為我按下這樣的按鈕:
foreach (Control c in this.Controls)
{
if (c is Button)
{
...
因此有時New
也會被選中,所以我最終得到了這個:
我現在想的只是在我需要的時候在代碼中執行檢查並明確地排除我的New
按鈕,但我不認為這是一個好方法,因為我可能會在很多地方做一個代碼來做這件事在我的程序中,在這種情況下什么是正確的解決方案? 如果需要一些代碼,請詢問。
而不是循環控件,將所有矩陣按鈕添加到列表中,並將new
按鈕分開:
private Button[] buttons;
private Button newButton;
現在您可以根據需要添加任意數量的按鈕:
for (int i = 0; i < 9; i++)
{
buttons[i] = new Button();
buttons[i].Text = "Button" + i;
Controls.Add(buttons[i])
}
最后,您的“ New
按鈕將循環顯示buttons
:
private void newButton_Click(object sender, EventArgs e)
{
foreach (Button b in buttons)
{
...
}
}
可能最簡單的解決方案是將Grid放在自己的Panel( pnlGrid
)中。 將所有按鈕放在那里,然后您可以執行以下操作:
foreach (Control ctl in pnlGrid.Controls) {
if (ctl is Button) {
// Do your logic here
}
}
您可以從按鈕類繼承。 創建自己的按鈕,使用此控件(具有與父控件相同的功能),並在迭代控件時檢查它。
您也可以使用Tag屬性進行此pourpose,但我認為繼承將更加清晰,為您的代碼添加語義含義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.