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

来源:互联网 发布:网络设计与管理华软 编辑:程序博客网 时间:2024/06/06 03:57

创建和管理有模式对话框

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) 之前的方法。

创建对话框派生自 DialogWindow

  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. 若要能够降至最低并最大化对话框中,将设置HasMaximizeButton和HasMinimizeButton为 true:

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

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

创建和管理一个对话框,不是派生自 DialogWindow

  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。 当您单击此命令时,你应看到对话框窗口。