将插值字符串存储为字符串变量以用作消息框消息

时间:2018-02-28 04:03:10

标签: c#

目前我在多个位置显示一个消息框,如下所示......

MessageBox.Show($"{CommandHandlerMessage} \n\n" + $"Source process = {sourceProcess}", $"{messageBoxTitlebar}", MessageBoxButton.OK, messageBoxImage);

有没有办法将消息组件分配给像......

这样的字符串
string messageBoxMessage = "{CommandHandlerMessage} \n\n"" + $""Source process = {sourceProcess}"", $""{messageBoxTitlebar}"", MessageBoxButton.OK, messageBoxImage"

所以我只需要显示如下字符串(或类似的东西)....

MessageBox.Show($"{messageBoxMessage}");

我在引号上尝试了转义序列,但我无法让它工作。

如果有人发现这有用,我成功实施了Akash KC建议的代码......

        Func<string, string, string, MessageBoxButton, MessageBoxImage, MessageBoxResult>
        messageBoxFunc = (commandHandlerMessage, sourceProcess, messageBoxTitle, messageBoxButton, messageBoxImage) => MessageBox.Show($"{commandHandlerMessage} \n\n Source process =  {sourceProcess}",
                         $"{messageBoxTitle}",
                         messageBoxButton,
                         messageBoxImage);

        messageBoxFunc(commandHandlerMessage, sourceProcess, messageBoxTitlebar, messageBoxButton, messageBoxImage);

1 个答案:

答案 0 :(得分:2)

使用string interpolation,您无法实现您的要求,因为字符串插值返回字符串,因为此插值将转换为String.Format方法,该方法返回string作为返回类型。

如果您的目的是重复使用,您只需创建一个代表,该代表将根据您的要求显示消息框。

Func<string, string, string, MessageBoxButtons, MessageBoxIcon, DialogResult> messageBoxFunc = 
                (handlerMessage, sourceProcess, messageBoxTitle, button, icon) =>
                MessageBox.Show($"{handlerMessage} \n\n\"Source process = {sourceProcess}\"",
                                $"{messageBoxTitle}", 
                                button,
                                icon);

//Calling above delegate
messageBoxFunc("HanldlerTest1", 
                "sourceprocessTest1", 
                "Title1",
                 MessageBoxButtons.OK,
                  MessageBoxIcon.Information);

正如您在评论中所述,您需要在多个表单中使用,您可以在实用程序类中创建静态委托并静态调用它。

您可以遵循给定的代码方法:

Util.cs

internal static class Util
    {
        internal static Func<string, string, string, MessageBoxButtons, MessageBoxIcon, DialogResult> MyMessageBoxFunc =
                (handlerMessage, sourceProcess, messageBoxTitle, button, icon) =>
                MessageBox.Show($"{handlerMessage} \n\n\"Source process = {sourceProcess}\"",
                                $"{messageBoxTitle}",
                                button,
                                icon);
    }

现在,您可以在表单中使用上面的静态委托:

 Util.MyMessageBoxFunc("HanldlerTest1",
                "sourceprocessTest1",
                "Title1",
                 MessageBoxButtons.OK,
                  MessageBoxIcon.Information);