【问题标题】:How to use CommandLineParser in a WinForms Project? How to build a custom Help MessageBox?如何在 WinForms 项目中使用 CommandLineParser?如何构建自定义帮助消息框?
【发布时间】:2019-11-15 11:41:41
【问题描述】:

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

除了帮助屏幕(在这种情况下为 MessageBox)外,它的效果很好。

我已经发现我需要创建一个自己的解析器并将至少HelpWriter 属性设置为null 以创建自定义帮助屏幕。

但是当应用程序使用--help 参数调用时,我的“错误处理程序”只会得到一个错误实例,其类型为Tag,值为CommandLine.ErrorType,值为HelpRequestedError

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

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

该站点建议使用 CommandLine.Text 命名空间中的类型,但如何使用?如何做到这一点的例子为零。

这里有人做过这样的事吗?

我有以下代码:

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

var locErr = err; 线上,我不知道该怎么做才能获得可以在 MessageBox 等中显示的帮助屏幕消息。

CommandLineParser 似乎支持 help--help 的开箱即用控制台输出,但我这里没有控制台应用程序。

【问题讨论】:

  • 请发布您的无效代码
  • @amura.cxg 我相应地编辑了我的问题

标签: c# winforms command-line-arguments


【解决方案1】:

好的,我现在想出了一个办法。似乎不是最好的方法,但它确实有效。

我创建了一个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;
}

所以现在这对我有用。

【讨论】:

    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 2011-08-26
    • 2021-05-30
    • 2016-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多