0

我试图显示一个FormChild带有一些单选按钮的表单(),只是为了从调用表单(FormParent)中选择、关闭和获取所选单选按钮的值。在 Button in 的 click 事件处理程序上FormParent,我刚刚做了:

var formChild=newFormChild();
formChild.ShowDialog(this);

一切都很好,直到我决定处理 FormChild 中的一个 RadioButtons 的 CheckedChanged 事件:

private void SomeRadioButton_CheckedChanged(object sender, EventArgs e)
{
    Close();
}

现在formChild.ShowDialog(this);没有显示 formChild 并且 formChild 立即返回DialogResult.Cancel

对此有何解释?

提前致谢

4

2 回答 2

2

默认情况下,将检查最低的选项卡索引单选按钮,如果将此事件处理程序分配给该按钮,它将导致您描述的情况。

您可以更改 Tab 键顺序或创建在 Forms Shown EventHandler 中设置的布尔标志,以防止它触发,直到您再次检查它。

public partial class Form1 : Form
{
    bool initDone;
    public Form1()
    {
        InitializeComponent();
    }

    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        if (initDone)
        {
            if (((RadioButton)sender).Checked == true)
            {
                Close();
            }
        }
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        initDone = true;
    }
}
于 2013-11-12T00:45:53.657 回答
1

如果您的代码设置了 RadioButton 的值,是否有任何地方?如果您以编程方式设置 RadioButton 的“Checked”属性,它将触发该事件。

在您的情况下,事件处理程序包含您的 Form.Close() 因此表单永远不会有机会对用户可见。

注意:在设计器中将 RadioButton.Checked 设置为“true”不会触发事件。

于 2013-11-12T00:41:43.367 回答