消息框图标 -> 变量?

Message Box Icon -> Variable?

我正在制作一个 MessageBox 方法,我可以在我的程序中快速调用它,而不必创建多个 MessageBox 代码,但是我 运行 进入的是 运行所有东西都有相同的图标,目前是错误的。

有什么方法可以在方法调用时动态改变图标吗?

这是我目前所拥有的,并且运行良好。

    private void MB(string Text, String Title)
    {
        MessageBox.Show(Text, Title,
                System.Windows.Forms.MessageBoxButtons.OKCancel,
                System.Windows.Forms.MessageBoxIcon.Error);
    }

我希望做的是创建:

        private void MB(string Text, String Title, Variable ICON)
    {
        MessageBox.Show(Text, Title,
                System.Windows.Forms.MessageBoxButtons.OKCancel,
                System.Windows.Forms.MessageBoxIcon.ICON);
    }

并且能够调用它:

MB("String 1", "String 2", Error);
MB("String 1", "String 2", Question);

不确定这是否可行?

感谢您的帮助:D

该图标是一个 enum,因此您可以这样做:

private void MB(string Text, String Title, MessageBoxIcon ICON)
{
    MessageBox.Show(Text, Title,
            MessageBoxButtons.OKCancel,
            ICON);
}

您可以像这样使用它:

MB("String 1", "String 2", MessageBoxIcon.Error);

也许创建一个语言扩展,在这种情况下有几个可供选择。

在这种情况下,以下代码在一个表单中,源代码在一个 class 项目中 WindowFormsHelpersLibrary 所以要使用它们添加一个静态 using 语句。

注意几个也将默认按钮设置为否,我发现这对那些不注意要求删除记录的用户很有用。

表单代码

使用静态 WindowFormsHelpersLibrary.LanguageExtensions.Dialogs;

使用 MessageBox = System.Windows.Forms.MessageBox;

if (MessageBox("Whatever to say", "Demo", MessageBoxIcon.Asterisk))
{
    MessageBox.Show("Ok");
}
else
{
    MessageBox.Show("Cancelled");
}

if (MessageBox("Whatever to say"))
{
    MessageBox.Show("Ok");
}
else
{
    MessageBox.Show("Cancelled");
}

if (Question("Continue with processing"))
{
    MessageBox.Show("Ok");
}
else
{
    MessageBox.Show("Cancelled");
}

InformationDialog("Operation completed","Bulk upload", MessageBoxIcon.Exclamation);

class 项目中的来源

using System.Diagnostics;
using System.Windows.Forms;
using static System.Windows.Forms.MessageBox;

namespace WindowFormsHelpersLibrary.LanguageExtensions
{
    public static class Dialogs
    {
        [DebuggerStepThrough]
        public static bool Question(string text) =>
            (Show(text, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question, 
                MessageBoxDefaultButton.Button2) == DialogResult.Yes);
        
        [DebuggerStepThrough]
        public static bool Question(string text, MessageBoxIcon icon) =>
            (Show(text, Application.ProductName, MessageBoxButtons.YesNo, icon, 
                MessageBoxDefaultButton.Button2) == DialogResult.Yes);


        [DebuggerStepThrough]
        public static void InformationDialog(string message, string title) =>
            Show(message, title, MessageBoxButtons.OK, MessageBoxIcon.Information);

        [DebuggerStepThrough]
        public static void InformationDialog(string message, string title, MessageBoxIcon icon) =>
            Show(message, title, MessageBoxButtons.OK, icon);


        [DebuggerStepThrough]
        public static void ErrorDialog(string message) =>
            Show(message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);


        [DebuggerStepThrough]
        public static void ErrorDialog(string message, string title) =>
            Show(message, title, MessageBoxButtons.OK, MessageBoxIcon.Error);


        [DebuggerStepThrough]
        public static bool MessageBox(string text, MessageBoxIcon icon = MessageBoxIcon.Error) =>
            Show(text, Application.ProductName, MessageBoxButtons.OKCancel, icon) == DialogResult.OK;

        [DebuggerStepThrough]
        public static bool MessageBox(string text,string title, MessageBoxIcon icon = MessageBoxIcon.Error) => 
            Show(text, title, MessageBoxButtons.OKCancel, icon) == DialogResult.OK;
    }
}

simpler 版本

public static class Dialogs
{
    [DebuggerStepThrough]
    public static bool MsgBox(string text, MessageBoxIcon icon = MessageBoxIcon.Error) =>
        MessageBox.Show(text, Application.ProductName, MessageBoxButtons.OKCancel, icon) == DialogResult.OK;

    [DebuggerStepThrough]
    public static bool MsgBox(string text, string title, MessageBoxIcon icon = MessageBoxIcon.Error) =>
        MessageBox.Show(text, title, MessageBoxButtons.OKCancel, icon) == DialogResult.OK;
}

用法

if (MsgBox("Continue?"))
{
    MessageBox.Show("Yes");
}
else
{
    MessageBox.Show("No");
}
if (MsgBox("Continue?", MessageBoxIcon.Question))
{
    MessageBox.Show("Yes");
}
else
{
    MessageBox.Show("No");
}