【问题标题】:C# save confirmation message while leaving formC#在离开表单时保存确认消息
【发布时间】:2012-10-02 11:27:49
【问题描述】:

在离开(不关闭 - 将焦点设置到另一个表单)非模态表单时显示保存确认消息的最佳方式是什么?

用户可以选择

  • 是(保存更改并将焦点设置到 targetform)
  • 否(回滚并将焦点设置到目标表单)
  • 取消(保持活动表单 - 取消将焦点设置到目标表单)

我找不到阻止将焦点设置到另一个表单的解决方案。类似于关闭事件,我可以使用 FormClosingEventArgs.Cancel 属性。

在我的情况下,使用模态表单是不可接受的。

提前致谢

【问题讨论】:

  • 您找到或尝试了哪些方法?或者您最初尝试使用的解决方案有什么问题?
  • @O.R.Mapper 评论的翻译是“您了解 Stack Overflow 中使用的一些约定吗?” :)
  • 主要问题:我找不到阻止将焦点设置到另一个表单的解决方案。
  • 显示myForm.ShowDialog();这样的表格,这样可以防止它被关闭...

标签: c# winforms


【解决方案1】:

首先,您可以使用Deactivated 事件来检测表单何时失去焦点。然后,如果用户想留在失去焦点的表单中,您可以调用BringToFront 方法将表单重新设置为活动状态。

您不能阻止用户激活另一个表单,但您可以尝试(使用上述方法)将激活更改回当前表单。

【讨论】:

  • 非常感谢。有用。如果我在停用事件中显示消息框,仍然存在一个问题。因此 MessageBox 获得焦点。确认对话框后,焦点被设置回活动表单而不是原始目标表单。我想我必须在 MessageBox.Show() 方法中使用 IWinOwner 参数,但我不知道如何获取目标表单。
【解决方案2】:

最好的方法是覆盖 OnLostFocus 事件。代码如下:

protected override void OnLostFocus(EventArgs e) { 
    base.OnLostFocus(e); 
    this.Focus(); 
}

【讨论】:

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