簡體   English   中英

C#如何取消選中動態創建的單選按鈕?

[英]C# how can I uncheck dynamically created radio buttons?

我正在動態創建表單中的一些單選按鈕,我希望用戶能夠取消選擇它們。 用戶的選項應該選擇一個,或者不選擇(使用安全性比單選框更安全)。 我嘗試使用EventHandler並創建一個事件,但運氣不佳,使其無法正常工作。

這是我要做的按鈕:

private void makeRadioButtons(string size, Panel pnl)
    {
        for (int i = 0; i < 2; i++)
        {
            RadioButton btn = new RadioButton();
            btn.AutoSize = true;
            btn.Name = i;
            btn.Text = i;
            btn.Location = new Point(100*i, 0);
            btn.Click += new EventHandler(radioHandler);
            pnl.Controls.Add(btn);
        }
}

這是我的事件處理程序:

private void radioHandler(object sender, EventArgs e)
    {
        RadioButton rdo = sender as RadioButton;
        if(rdo.Checked)
        {
            rdo.Checked = false;
        }
        else
        {
            rdo.Checked = true;
        }
    }

編譯時會得到按鈕,但是無法選擇或取消選擇它們。 我感覺自己已經接近了,但是我無法弄清楚我在做什么錯。

默認情況下會自動檢查RadioButtons。 您可以通過在創建它們時將其AutoCheck屬性設置為false來避免這種情況。

然后,您需要像這樣更改處理程序:

private void radioHandler(object sender, System.EventArgs e)
{
    RadioButton rbt = (RadioButton)sender;
    if (rbt.Checked)
    {
        rbt.Checked = false;
        return;
    }

    rbt.Checked = true;
    foreach (RadioButton r in pnl.Controls.OfType<RadioButton>())
        if (r != rbt) r.Checked = false;
}

因此,如果單擊的按鈕被選中,則未選中。 如果未選中,則將其選中,然后取消選中所有其他復選框(這是必需的,因為我們將AutoCheck設置為false )。

麻煩的是您的事件處理程序代碼。

用戶單擊時,單選按鈕會自動選中/取消選中。

您的代碼則相反!

編輯

只需要刪除處理程序即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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