Рейтинг@Mail.ru

Красивое диалоговое окно в .NET

Print Friendly, PDF & Email

Чтобы вместо стандартного MessageBox в приложении WPF использовать более современное и «красивое» окно, можно использовать средства самой Windows. Напишем класс-помощник, который будет выводить диалоговое окно, используя системную библиотеку comctl32.dll.

Imports System.Runtime.InteropServices

''' <summary>
''' "Красивое" диалоговое окно.
''' </summary>
Public Module TaskDialogHelper

    <DllImport("comctl32.dll", CharSet:=CharSet.Unicode, PreserveSig:=False)>
    Public Function TaskDialog(hwndParent As IntPtr, hInstance As IntPtr, title As String, mainInstruction As String, content As String, buttons As TaskDialogButtons, icon As TaskDialogIcon) As TaskDialogResult
    End Function

    Public Enum TaskDialogResult As Integer
        Ok = 1
        Cancel = 2
        Retry = 4
        Yes = 6
        No = 7
        Close = 8
    End Enum

    <Flags>
    Public Enum TaskDialogButtons As Integer
        Ok = &H1
        Yes = &H2
        No = &H4
        Cancel = &H8
        Retry = &H10
        Close = &H20
    End Enum

    Public Enum TaskDialogIcon As Integer
        Shield = 65532
        Information 
        [Error] 
        Warning 
    End Enum

End Module

Также в манифесте проекта необходимо раскомментировать следующий участок:

  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>

Использовать код можно таким образом:

Dim dr = TaskDialogHelper.TaskDialog(New System.Windows.Interop.WindowInteropHelper(Me).Handle,
    IntPtr.Zero,
    "Лаконичный заголовок окна",
    "Здесь будет основной текст сообщения.",
    "А здесь вспомогательный.",
    TaskDialogHelper.TaskDialogButtons.Yes Or TaskDialogHelper.TaskDialogButtons.No,
    TaskDialogHelper.TaskDialogIcon.Information)

Желательно также при выводе данного окна проверять версию операционной системы: данное окно можно использовать в Windows Vista и более современных (версия больше 6):

If (System.Environment.OSVersion.Version.Major >= 6) Then 
    …
Ключевые слова: :

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email