【问题标题】:How to detect the close event of MMC 3.0 SnapIn written in C#如何检测 C# 编写的 MMC 3.0 SnapIn 的关闭事件
【发布时间】:2010-08-02 08:49:39
【问题描述】:

伙计们,我正在用 C# 创建一个 MMC3.0 SnapIn 程序。那里有一些范围节点和 FormViewDescription,我使用 C# UserControl 实例来显示一些数据。我的意图是,用户必须查看这些数据并将其更新到 UserControl 中,并且该 UserControl 上有一个保存按钮,用户应该在编辑结束时按下该按钮,然后我将保留该更改。

现在的问题是, 如果在进行一些更改后,用户关闭了 SnapIn 窗口,他的所有更改都消失了 :( 我需要在关闭此窗口之前使用“退出前保存”对话框(或类似的东西 - 你知道任何的标准功能)编辑程序)。 但是找不到这样做的方法。对我有什么建议吗?

将不胜感激!

【问题讨论】:

    标签: c# mmc3


    【解决方案1】:

    巧合的是,我也刚刚以与您在上面描述的方式大致相同的方式创建了一个 MMC,但经过大量搜索(和挫折),我找不到任何方法来取消关闭事件。我建议您更改方法,如下所述。

    首先看看 Windows 中的大多数 MMC 是如何处理更改设置的。通常,如果您想更改设置,您可以在 ListView 中选择一个项目,然后右键单击“属性”以调出设置表单并在那里进行更改。

    打开表单使开发人员能够控制表单的整个生命周期,并确保在关闭之前保存设置。

    所以我的建议是:

    1. 创建您的 FormView
    2. 添加您需要的任何状态信息
    3. 将“编辑设置”按钮添加到您的 窗体视图
    4. 创建一个 Windows 窗体 保存/取消+所有数据输入 控件
    5. 启动您的表单 当您单击“编辑设置”按钮时,myForm.ShowDialog()
    6. 处理保存/取消按钮 如果按下并适当取消 数据脏了

    我希望这会有所帮助。祝你好运!

    【讨论】:

    • 您好,非常感谢您的回复。我知道你的意思,事实上,我也想过一个基于弹出对话框的编辑场景。但就我而言,这可能是不可能的,原因如下: 1. 我有很多节点及其详细信息页面。因此,为它们中的每一个创建弹出编辑页面将花费大量时间,同时也是用于一般显示的只读页面。 2. 除了双重开发之外,我的客户不喜欢弹出对话框来配置每个节点。我可以想象,你已经感到沮丧,但对我来说好消息是我终于解决了我的问题。
    • 我是如何解决我的问题的:我使用原生窗口拦截器来拦截父 SnapIn 的 WindProc 方法,并且只拦截我正在使用的子节点。拦截 WM_Close 消息后,我的解决方案看起来很棒。就像写字板实例一样,它会在关闭之前提示是、否、取消,并根据用户的选择执行它需要做的事情。编程愉快,再次感谢!
    • 太棒了!我猜你用过这个类:msdn.microsoft.com/en-us/library/…我不知道为什么我在搜索过程中从来没有发现它!如果您有时间,请尝试发布代码示例,因为我相信其他人有一天也会从中受益。
    • 我已经用代码示例写了一篇博文,以便任何遇到同样问题的人都可以找到解决方法。顺便说一句,感谢您抽出宝贵时间回答此主题。编程愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多