簡體   English   中英

Windows窗體 - 如何從整個集中排除按鈕

[英]Windows Forms - how to exclude button from the whole set

我有一個只包含buttonsWindows 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM