Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从FormClosing事件设置属性值_C#_Winforms - Fatal编程技术网

C# 从FormClosing事件设置属性值

C# 从FormClosing事件设置属性值,c#,winforms,C#,Winforms,我在我的主窗体上有一个ToolStripButton,并附加了一个click事件,单击它将打开一个对话框,并将ToolStripButton的选中状态设置为“true”。 在从上面打开的窗体的FormClosing事件上,单击,尝试将同一toolStripButton的选中状态设置为“false”。 但该州始终保持“真实” toolStripButton1_Click(object sender, EventArgs e) { if (!toolStripButton1.Checked)

我在我的主窗体上有一个ToolStripButton,并附加了一个click事件,单击它将打开一个对话框,并将ToolStripButton的选中状态设置为“true”。 在从上面打开的窗体的FormClosing事件上,单击,尝试将同一toolStripButton的选中状态设置为“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应用程序

您正在MainForm的新实例上设置它。打开对话框时需要传递MainForm的实例,也可以在ShowDialog之后在MainForm本身中传递

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

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

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

这将保持为真,因为在FormClosing事件中,您在mainForm上的全新实例中将revEditState设置为false。您可以将变量作为引用传递给次窗体,或者在主窗体中指定FormClosing事件,如下所示

revTools.FormClosing += new FormClosingEventHandler(RevisionTools_FormClosing);
您需要将“RevisionTools\u FormClosing”移动到主窗体。

您正在将新对象的(mainForm)属性设置为false。非原创