【问题标题】:WinForms UserControl version of Form.ClosingWinForms UserControl 版本的 Form.Closing
【发布时间】:2012-04-25 23:38:32
【问题描述】:

我有一个带有子表单的 MDI 表单,我想将它重构为一个带有包含子控件的选项卡控件的单个表单,以便摆脱 MDI clunkiness

在考虑将子窗体转换为子控件(或用户控件)时,我确实看到我会丢失某些子窗体使用的 FormClosing 事件。

我可以覆盖Dispose 来处理一些功能,但在某些情况下我想取消关闭事件。另外,我希望在控件关闭之前调用此事件,即使它所在的窗体没有关闭,因此不能将控件连接到窗体的关闭事件。

是否有一种干净的方法可以在控件类中重现FormClosing 事件,或者当我将子表单添加到选项卡控件时,我应该将它们保留为表单吗?

编辑:为了更清楚一点,我正在寻找一种方法在用户控件关闭之前在用户控件上引发类似 ControlClosing 的内容(不一定是在主机表单关闭时)为了提示用户是否希望保存对其数据的更改,并允许用户选择标准是/否/取消。

我不希望覆盖承载控件的表单的关闭。

【问题讨论】:

  • 最终还是使用 MDI 表单并使用 Infragistics TabbedMDIManager 控件来提供漂亮的选项卡式界面,但如果我决定使用子控件手动创建选项卡式界面,Nick 的回答是我会采用的方式。

标签: .net vb.net winforms controls


【解决方案1】:

只要您在 Tab Control 中创建子表单(我假设您为每个 TagPage 放置一个子表单),您就可以删除整个 TabPage 或仅删除 TabPage 中的对象来处理您的子表单

TabControl1.TabPages.Remove(TabPage1)

TabPage1.Controls.Remove(ChildForm)

【讨论】:

  • 我希望在子控件类内部有一些东西(实际上是我的子窗体控件派生的基类),但这可能是我可能不得不询问子控件的地方如果它有未保存的数据。
  • 那么你可能需要像 Me.Parent.Controls.Remove(Me) 这样的东西
【解决方案2】:

试试ParentChanged,或者VisibleChanged

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 2023-03-09
    • 2018-06-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多