Как передать аргументы командной строки в приложение WinForms?

У меня есть два разных приложения WinForms, AppA и AppB. Обе версии работают на .NET 2.0.

В AppA я хочу открыть AppB, но мне нужно передать ему аргументы командной строки. Как использовать аргументы, которые я передаю в командной строке?

Это мой текущий основной метод в AppB, но я не думаю, что вы можете изменить это?

  static void main()
  {
  }

Ответ 1

static void Main(string[] args)
{
  // For the sake of this example, we're just printing the arguments to the console.
  for (int i = 0; i < args.Length; i++) {
    Console.WriteLine("args[{0}] == {1}", i, args[i]);
  }
}

Затем аргументы будут сохранены в массиве строк args:

$ AppB.exe firstArg secondArg thirdArg
args[0] == firstArg
args[1] == secondArg
args[2] == thirdArg

Ответ 2

Лучший способ работы с args для вашего winforms - использовать

string[] args = Environment.GetCommandLineArgs();

Вы можете связать это с помощью enum, чтобы упростить использование массива в вашей базе кода.

"И вы можете использовать это в любом месте своего приложения, вы arent just ограничивается его использованием в методе main(), например, в консоли применение".

Найдено по адресу: ЗДЕСЬ

Ответ 3

Вы можете захватить командную строку любого приложения .Net, обратившись к свойству Environment.CommandLine. Он будет иметь командную строку как одну строку, но разбор данных, которые вы ищете, не должен быть ужасно трудным.

Наличие пустого Main метода не повлияет на это свойство или способность другой программы добавить параметр командной строки.

Ответ 4

Вы используете эту подпись: (в С#) static void Main (string [] args)

Эта статья может помочь объяснить роль основной функции в программировании: http://en.wikipedia.org/wiki/Main_function_(programming)

Вот вам небольшой пример:

class Program
{
    static void Main(string[] args)
    {
        bool doSomething = false;

        if (args.Length > 0 && args[0].Equals("doSomething"))
            doSomething = true;

        if (doSomething) Console.WriteLine("Commandline parameter called");
    }
}

Ответ 5

Это не может быть популярным решением для всех, но мне нравится Application Framework в Visual Basic, даже при использовании С#.

Добавьте ссылку на Microsoft.VisualBasic

Создайте класс под названием WindowsFormsApplication

public class WindowsFormsApplication : WindowsFormsApplicationBase
{

    /// <summary>
    /// Runs the specified mainForm in this application context.
    /// </summary>
    /// <param name="mainForm">Form that is run.</param>
    public virtual void Run(Form mainForm)
    {
        // set up the main form.
        this.MainForm = mainForm;

        // Example code
        ((Form1)mainForm).FileName = this.CommandLineArgs[0];

        // then, run the the main form.
        this.Run(this.CommandLineArgs);
    }

    /// <summary>
    /// Runs this.MainForm in this application context. Converts the command
    /// line arguments correctly for the base this.Run method.
    /// </summary>
    /// <param name="commandLineArgs">Command line collection.</param>
    private void Run(ReadOnlyCollection<string> commandLineArgs)
    {
        // convert the Collection<string> to string[], so that it can be used
        // in the Run method.
        ArrayList list = new ArrayList(commandLineArgs);
        string[] commandLine = (string[])list.ToArray(typeof(string));
        this.Run(commandLine);
    }

}

Измените свою основную() процедуру, чтобы выглядеть как

static class Program
{

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var application = new WindowsFormsApplication();
        application.Run(new Form1());
    }
}

Этот метод предлагает некоторые дополнительные полезные функции (такие как поддержка SplashScreen и некоторые полезные события)

public event NetworkAvailableEventHandler NetworkAvailabilityChanged;d.
public event ShutdownEventHandler Shutdown;
public event StartupEventHandler Startup;
public event StartupNextInstanceEventHandler StartupNextInstance;
public event UnhandledExceptionEventHandler UnhandledException;

Ответ 6

Считайте, что вам нужно разработать программу, через которую вам нужно передать два аргумента. Прежде всего, вам нужно открыть класс Program.cs и добавить аргументы в метод Основной, как показано ниже, и передать эти аргументы конструктору формы Windows.

static class Program
{    
   [STAThread]
   static void Main(string[] args)
   {            
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       Application.Run(new Form1(args[0], Convert.ToInt32(args[1])));           
   }
}

В классе формы Windows добавьте параметризованный конструктор, который принимает входные значения из класса Program, как показано ниже.

public Form1(string s, int i)
{
    if (s != null && i > 0)
       MessageBox.Show(s + " " + i);
}

Чтобы проверить это, вы можете открыть командную строку и перейти в место, где находится этот exe. Укажите имя файла, затем параметр parmeter1. Например, см. Ниже

C:\MyApplication>Yourexename p10 5

Из вышеприведенного кода С# он предложит Messagebox со значением p10 5.