如何在LinqPad查询中显示MessageBox对话框?

Whi*_*uit 2 linqpad

运行/调试时,调用MessageBox或Microsoft.VisualBasic.Interaction.MsgBox挂起而不显示任何对话框.我认为它被阻止了,但没有看到如何解决这个问题的例子.

Mat*_*att 5

我正在为您提供分步说明,希望对您有所帮助:

制备

您需要通过按LinqPad编辑器添加引用F4.查询属性对话框打开.

在那里,用于Add...添加程序集Microsoft.VisualBasic.dll并切换到选项卡Additional Namespace Imports.Microsoft.VisualBasic单击,键入并关闭对话框OK.


一般用法

最后,您可以按如下方式使用它:

void Main()
{
    Interaction.MsgBox("Hello"); 
}
Run Code Online (Sandbox Code Playgroud)

注意: Microsoft.VisualBasic可以与C#以及VB.NET一起使用,但是此示例正在使用该C# Program设置.

请注意,如果您使用多台显示器,则消息框可能会出现在另一台显示器上,而不会显示在前台,因此您可能不会注意到它.

我建议您强制以这种方式在前台显示它:

Interaction.MsgBox("Hello", MsgBoxStyle.MsgBoxSetForeground);       
Run Code Online (Sandbox Code Playgroud)

但是你不能强迫它在特定的显示器上显示.


按钮和其他参数

如果您需要了解有关参数的更多信息,例如标题,要显示的按钮等,您可以在MSDN中查看.

例如,要显示" 中止,重试,忽略"对话框并将" 重试"作为默认按钮(DefaultButton2),您可以使用:

MsgBoxResult result =
    Interaction.MsgBox(Title: "Critical Error", Prompt: "Cannot read file",
        Buttons: MsgBoxStyle.MsgBoxSetForeground | MsgBoxStyle.AbortRetryIgnore     
                 | MsgBoxStyle.Critical | MsgBoxStyle.DefaultButton2);
Run Code Online (Sandbox Code Playgroud)

同样,要将其他按钮设置为默认值:Abort将为DefaultButton1,Ignore将为DefaultButton3.您只能指定其中一个,如果不指定,则假定为DefaultButton1.


检查结果

用户单击后,您可以查询变量result以找出单击了哪个按钮(MsgBoxResult枚举),即

if (result==MsgBoxResult.Retry)
{
    Console.WriteLine("Retrying...");
}
Run Code Online (Sandbox Code Playgroud)

提示:LinqPad中,您还可以为命名空间添加别名.如果您不想Interaction.MsgBox每次都键入,可以按F4,转到" 其他命名空间导入"选项卡,在此处输入Dlg=Microsoft.VisualBasic.Interaction并单击关闭对话框OK.然后你可以用Dlg.MsgBox(...)而不是Interaction.MsgBox(...).