从FormClosing事件设置属性值

时间:2015-04-14 10:26:10

标签: c# winforms

我的主表单上有一个ToolStripButton,并附加了一个点击事件,点击它会打开一个对话框,并将toolStripButton的Checked状态设置为' true'。 在从上面的点击打开的表单的FormClosing事件中,尝试将相同的toolStripButton的Checked状态设置为' false'。 但是,国家仍然是真实的'总是

toolStripButton1_Click(object sender, EventArgs e)
{
 if (!toolStripButton1.Checked)
        {
            toolStripButton1.Checked = true;
            RevisionTools revTools = new RevisionTools(); 
            revTools.ShowDialog();
        }
}

创建如下属性:

public bool revEditState
    {
        get{return this.toolStripButton1.Checked;}
        set{this.toolStripButton1.Checked = value;}
    }

点击时打开的对话框:

public partial class RevisionTools : Form
{
    public RevisionTools()
    {
        InitializeComponent();
    }
    private void RevisionTools_FormClosing(object sender, FormClosingEventArgs e)
    {
        MainForm mainForm = new MainForm();
        mainForm.revEditState = false;
    }
}

这是设置属性值的正确方法吗?它是一个WinForms应用程序。

2 个答案:

答案 0 :(得分:3)

您正在MainForm的新实例上进行设置。您需要在打开对话框时传递MainForm的实例,或者您可以在ShowDialog之后在MainForm本身中执行此操作。

在您的示例中,在ShowDialog上执行此操作将是一种更好的方法。

RevisionTools revTools = new RevisionTools(); 
revTools.ShowDialog();
this.revEditState = false;

注意:您还可以将Dialog的结果作为DialogResult捕获,以有条件地设置此值。即如果用户在对话框上单击“确定”或“取消”。

答案 1 :(得分:0)

它保持正确,因为在您的FormClosing事件中,您在mainForm上的全新实例中将revEditState设置为false。您可以将变量传递给辅助表单作为参考,也可以在主表单中指定FormClosing事件,如下所示;

revTools.FormClosing += new FormClosingEventHandler(RevisionTools_FormClosing);

您需要移动" RevisionTools_FormClosing"到你的主要形式。