首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Windows.MessageBox vs System.Windows.Forms.MessageBox

System.Windows.MessageBox vs System.Windows.Forms.MessageBox
EN

Stack Overflow用户
提问于 2011-01-12 01:33:13
回答 4查看 14.2K关注 0票数 23

我很难找出这两个消息框之间的主要区别。System.Windows.MessageBoxSystem.Windows.Forms.MessageBox之间的区别是什么

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-12 01:36:19

System.Windows.MessageBox是使用WPF添加的,并且存在于WPF程序集(PresentationFramework.dll)中。

System.Windows.Forms.MessageBox是随Windows Forms一起添加的,并且存在于Windows Forms程序集中。

如果您的程序是Windows Forms程序,我会使用后者(System.Windows.Forms.MessageBox),因为它不会引入对WPF的依赖。另一方面,如果你在为WPF进行开发,我会使用System.Windows.MessageBox

票数 25
EN

Stack Overflow用户

发布于 2011-01-23 09:43:28

还有一点需要注意:

如果要在既不是windows窗体应用程序也不是窗体应用程序(如.NET控制台应用程序)的应用程序中显示消息框,则不应为这两个应用程序拖入程序集引用,因为这似乎是internet上的常言。

相反,您应该使用pinvoke并调用User32,如下所示:

代码语言:javascript
运行
复制
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern MessageBoxResult MessageBox(IntPtr hWnd, String text, String caption, int options);

/// <summary>
/// Flags that define appearance and behaviour of a standard message box displayed by a call to the MessageBox function.
/// </summary>
[Flags]
public enum MessageBoxOptions : uint
{
    Ok = 0x000000,
    OkCancel = 0x000001,
    AbortRetryIgnore = 0x000002,
    YesNoCancel = 0x000003,
    YesNo = 0x000004,
    RetryCancel = 0x000005,
    CancelTryContinue = 0x000006,

    IconHand = 0x000010,
    IconQuestion = 0x000020,
    IconExclamation = 0x000030,
    IconAsterisk = 0x000040,
    UserIcon = 0x000080,
    IconWarning = IconExclamation,
    IconError = IconHand,
    IconInformation = IconAsterisk,
    IconStop = IconHand,
    DefButton1 = 0x000000,
    DefButton2 = 0x000100,
    DefButton3 = 0x000200,
    DefButton4 = 0x000300,

    ApplicationModal = 0x000000,
    SystemModal = 0x001000,
    TaskModal = 0x002000,

    Help = 0x004000, //Help Button
    NoFocus = 0x008000,

    SetForeground = 0x010000,
    DefaultDesktopOnly = 0x020000,
    Topmost = 0x040000,
    Right = 0x080000,
    RTLReading = 0x100000,
}

/// <summary>
/// Represents possible values returned by the MessageBox function.
/// </summary>
public enum MessageBoxResult : uint
{
    Ok = 1,
    Cancel,
    Abort,
    Retry,
    Ignore,
    Yes,
    No,
    Close,
    Help,
    TryAgain,
    Continue,
    Timeout = 32000
}

var result = User32.MessageBox(IntPtr.Zero, "Debugging Break", "Your Console Application", (int)User32.MessageBoxOptions.Ok);
票数 9
EN

Stack Overflow用户

发布于 2011-01-12 01:38:21

据我所知,两者最终都会调用相同的低级windows API ...

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4660587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档