【问题标题】:Message Box Icon -> Variable?消息框图标 -> 变量?
【发布时间】:2021-11-08 01:24:33
【问题描述】:

我正在制作一个 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

【问题讨论】:

  • 只创建函数的两个版本不是更简单(例如,MBErrorMBQuestion,然后调用合适的版本吗?它会让你的代码更清晰,更更易于维护。
  • 如果你看,你的新方法几乎没有比“多个 MessageBox 代码”节省任何东西,并且当你添加图标灵活性和按钮选项时,它更接近于它。它被称为inner platform
  • 使用MessageBoxIcon类型作为你的最后一个参数?...

标签: c# winforms messagebox


【解决方案1】:

图标是enum,所以你可以这样做:

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

你可以像这样使用它:

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

【讨论】:

  • 谢谢!这正是我想要的:)
  • @Ablac 不客气
【解决方案2】:

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

在这种情况下,以下代码在一个表单中,源代码在一个类项目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);

类项目中的源代码

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");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多