如何在WinForms项目中使用CommandLineParser?如何构建自定义的帮助消息框?

时间:2019-07-04 18:30:08

标签: c# winforms command-line-parsing

我正在尝试在WinForms应用程序中使用版本2.5.0中的CommandLineParser库。

除了帮助屏幕(在这种情况下为MessageBox)之外,它都很好用。

我已经弄清楚需要创建自己的解析器并将至少HelpWriter属性设置为null来创建自定义帮助屏幕。

但是,当使用--help参数调用应用程序时,我的“错误处理程序”只会得到一个错误实例,该错误实例的类型为Tag的{​​{1}}并且值为CommandLine.ErrorType < / p>

现在如何建立自定义帮助屏幕?

https://github.com/commandlineparser/commandline/wiki/Generating-Help-and-Usage-information

此站点建议在CommandLine.Text命名空间中使用类型,但是如何使用?共有零个示例。

这里有人做这样的事吗?

我有以下代码:

HelpRequestedError

在在线namespace myWorkspace { using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; using CommandLine; using DevExpress.XtraEditors; using Options; internal static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] internal static int Main(string[] args) { AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "bin"; WindowsFormsSettings.EnableFormSkins(); WindowsFormsSettings.EnableMdiFormSkins(); WindowsFormsSettings.ForceDirectXPaint(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var parser = new Parser(config => { config.AutoHelp = true; config.AutoVersion = true; config.CaseInsensitiveEnumValues = false; config.CaseSensitive = false; config.EnableDashDash = true; config.HelpWriter = null; config.IgnoreUnknownArguments = true; //config.MaximumDisplayWidth config.ParsingCulture = CultureInfo.InvariantCulture; }); return Parser.Default.ParseArguments<RunOptions>(args) .MapResult( RunRunAndReturnExitCode, RunParsingFailedAndReturnExitCode); } private static int RunRunAndReturnExitCode(RunOptions opts) { try { Application.Run(new MainForm()); } catch { return -1; } return 0; } private static int RunParsingFailedAndReturnExitCode(IEnumerable<Error> errs) { foreach (var err in errs) { var locErr = err; } return 1; } } } 上,我不知道如何获得可在MessageBox等中显示的帮助屏幕消息。

var locErr = err;似乎支持CommandLineParserhelp的开箱即用控制台输出,但是这里没有控制台应用程序。

1 个答案:

答案 0 :(得分:0)

好吧,我现在想出了一种方法。似乎不是最好的方法,但是它可以工作。

我创建一个StringBuilder实例并将其放入一个StringWriter实例

private static StringBuilder helpTextBuilder = new StringBuilder();
private static StringWriter helpTextWriter = new StringWriter(helpTextBuilder);

然后我创建一个(至少具有)选项的新解析器:

var parser = new Parser(config =>
{
    config.HelpWriter = helpTextWriter;
});

如果出现错误,我现在可以使用写入helpTextBuilder的内容显示一个消息框。

private static int RunParsingFailedAndReturnExitCode(IEnumerable<Error> errs)
{
    MessageBox.Show(helpTextBuilder.ToString());
    return 1;
}

现在这对我有用。