4.11创建和管理有模式对话框

创建和管理有模式对话框

Visual Studio 2015
 

若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档

在创建模式对话框在 Visual Studio 时,您必须确保显示对话框中,同时禁用对话框中的父窗口,然后对话框中关闭后重新启用父窗口。 如果不这样做,可能会收到错误:"Microsoft Visual Studio 不能关闭,因为模式对话框处于活动状态。 关闭活动对话框,然后重试。"

有两种方法执行此操作。 建议的方法,如果您有 WPF 对话框中,是派生它从DialogWindow,然后调用ShowModal以显示对话框。 如果这样做,您不需要管理模式的父窗口的状态。

如果您的对话框不是 WPF 中,或者对于某些其他原因不能派生您的对话框类派生DialogWindow,则必须通过调用获取对话框中的父GetDialogOwnerHwnd自行和管理模式状态,通过调用EnableModeless参数为 0 (false) 在显示对话框中,并关闭该对话框之后调用该方法再次使用的参数 1 (true) 之前的方法。

  1. 创建一个名为的 VSIX 项目OpenDialogTest并添加一个名为的菜单命令OpenDialog。 有关如何执行此操作的详细信息,请参阅使用菜单命令创建扩展

  2. 若要使用DialogWindow类,必须添加对下列程序集引用 (在框架选项卡的添加引用对话框中):

    • PresentationCore

    • PresentationFramework

    • WindowsBase

    • System.Xaml

  3. 在 OpenDialog.cs,添加以下using语句︰

    C#
    using Microsoft.VisualStudio.PlatformUI;  
    
    
  4. 声明一个名为类TestDialogWindow派生的DialogWindow:

    C#
    class TestDialogWindow : DialogWindow  
    {. . .}  
    
    
  5. 若要能够降至最低并最大化对话框中,将设置HasMaximizeButtonHasMinimizeButton为 true:

    C#
    internal TestDialogWindow()  
    {  
        this.HasMaximizeButton = true;  
        this.HasMinimizeButton = true;  
    }  
    
    
  6. OpenDialog.ShowMessageBox方法中,将现有代码替换为以下︰

    C#
    TestDialogWindow testDialog = new TestDialogWindow();  
    testDialog.ShowModal();  
    
    
  7. 生成并运行应用程序。 Visual Studio 的实验实例应显示。 在工具的实验实例中的菜单上,您应该看到名为命令调用 OpenDialog。 当您单击此命令时,你应看到对话框窗口。 您应能够降至最低并最大化窗口。

  1. 对于此过程中,您可以使用OpenDialogTest在具有相同的程序集引用的上一个过程中创建的解决方案。

  2. 将以下代码添加using声明︰

    C#
    using System.Windows;  
    using Microsoft.Internal.VisualStudio.PlatformUI;  
    
    
  3. 创建一个名为类TestDialogWindow2派生的窗口:

    C#
    class TestDialogWindow2 : Window  
    {. . .}  
    
    
  4. 添加对私有引用IVsUIShell:

    private IVsUIShell shell;  
    
    
  5. 添加将该引用设置为一个构造函数IVsUIShell:

    C#
    public TestDialogWindow2(IVsUIShell uiShell)  
    {  
        shell = uiShell;  
    }  
    
    
  6. OpenDialog.ShowMessageBox方法中,将现有代码替换为以下︰

    C#
    IVsUIShell uiShell = (IVsUIShell)ServiceProvider.GetService(typeof(SVsUIShell));  
    
    TestDialogWindow2 testDialog2 = new TestDialogWindow2(uiShell);  
    //get the owner of this dialog  
    IntPtr hwnd;  
    uiShell.GetDialogOwnerHwnd(out hwnd);  
    testDialog2.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;  
    uiShell.EnableModeless(0);  
    try  
    {  
        WindowHelper.ShowModal(testDialog2, hwnd);  
    }  
    finally  
    {  
        // This will take place after the window is closed.  
        uiShell.EnableModeless(1);  
    }  
    
    
  7. 生成并运行应用程序。 在工具菜单上,您应该看到名为命令调用 OpenDialog。 当您单击此命令时,你应看到对话框窗口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值