【问题标题】:Set property value from FormClosing event从 FormClosing 事件中设置属性值
【发布时间】:2015-04-14 18:34:23
【问题描述】:

我的主窗体上有一个 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 应用程序。

【问题讨论】:

  • 您将新对象的 (mainForm) 属性设置为 false。不是原创的

标签: c# winforms


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    revTools.FormClosing += new FormClosingEventHandler(RevisionTools_FormClosing);
    

    您需要将“RevisionTools_FormClosing”移动到您的主表单中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多