【问题标题】:Execute code in one form when another form is closed [duplicate]关闭另一种形式时以一种形式执行代码[重复]
【发布时间】:2019-03-09 10:18:04
【问题描述】:

所以我有Form1Form2

当我使用this.Close() 关闭Form2 时,我希望Form1 检测到关闭并执行代码。

这个可以吗?

【问题讨论】:

  • JohnEphraimTugado 我不会说它是重复的,因为 Denise 可能不知道 DialogResult。但是,丹妮丝,来自约翰的链接就是您的答案。
  • @Antoine 谢谢 :) 老实说,我不知道 DialogResult 和是的 :) 我会看看
  • @JohnEphraimTugado 感谢分享 :) 所以 DialogResult 和使用 FormClosing 事件方法都解决了我的问题!我想我会坚持使用 DialogResult 只是因为我可以用它做更多事情:)
  • @Denise 只是一个快速提示。始终将鼠标悬停在方法上只是为了查看它返回的内容。大多数时候,它不仅仅是无效的。这将在以后经常帮助您解决问题。
  • 我觉得我被欺负了 o.o...你怎么能肯定地说我以前确实遇到过其他帖子?

标签: c# winforms


【解决方案1】:

是的,您可以在FormClosing 事件中执行任何您想要的操作,但您需要 在Form1 上声明一个静态属性并在Form2 中为FormClosing 设置值,在peroperty 的set{} 方法中写入您要执行的任何内容。

// in Form 2
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    Form1.IsForm2Closed = true;
}

// in Form 1
private static _isForm2Closed ;
public static bool IsForm2Closed 
{
    get
    {
        return _isForm2Closed;
    }
    set
    {
        _isForm2Closed = value;

       if(value)
       {
           // do whatever you want to execute here.
       }
    }
}

【讨论】:

  • 如果你要做到这一点,为什么不从Form1订阅Form2FormClosing事件呢?您目前遇到的问题是,如果您想更改任何实例成员或调用Form1 中的任何实例方法,则不能,因为您的代码使用的是静态属性。这似乎也是对属性设置器的滥用。
  • 这是个好主意,你能举个例子,放在这里吗?
  • @SiavashGhanbari 所以在 form1 中我会不断地执行代码来检查 bool IsForm2Closed?
  • @Denise 是的,这就是我的意思,这将是可行的,但我认为 John 的评论很重要。
  • @SiavashGhanbari 是的 :) 实际上这两种方法都解决了我的问题。谢谢你帮助我:)
猜你喜欢
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多