WinForms 응용 프로그램에 명령 줄 인수를 어떻게 전달합니까?


105

두 가지 WinForms 응용 프로그램, AppA 및 AppB가 있습니다. 둘 다 .NET 2.0을 실행하고 있습니다.

AppA에서 AppB를 열고 싶지만 명령 줄 인수를 전달해야합니다. 명령 줄에서 전달하는 인수를 어떻게 사용합니까?

이것이 AppB의 현재 주요 방법이지만 변경할 수 없다고 생각합니까?

  static void main()
  {
  }

답변:


118
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

6
입력 : "whatever.exe -v foo / lol nisp". 출력 : args [0] = "-v"; args [1] = "foo"; args [2] = "/ lol"; args [3] = "nisp"; 무엇이 더 쉬울 수 있습니까?
Callum Rogers

내가 'string [] args'를 일년 내내 여러 번 보았다는 것을 믿을 수 없으며 그것은 나에게 결코 일어나지 않았습니다. haha
Niklas

1
args [0]은 실행중인 응용 프로그램의 전체 경로 및 exe 이름이고 args [1]이 첫 번째 매개 변수 인 것 같습니다.
Allan F

197

winforms 앱에서 args로 작업하는 가장 좋은 방법은 다음을 사용하는 것입니다.

string[] args = Environment.GetCommandLineArgs();

코드베이스 전체에서 배열 사용을 강화하기 위해 열거 형 을 사용하여 이것을 결합 할 수 있습니다 .

"그리고이 기능은 응용 프로그램의 어느 곳에서나 사용할 수 있습니다. 콘솔 응용 프로그램에서와 같이 main () 메서드에서만 사용하도록 제한되지 않습니다."

발견 위치 : HERE


25
배열의 첫 번째 요소에는 실행중인 프로그램의 파일 이름이 포함됩니다. 파일 이름을 사용할 수없는 경우 첫 번째 요소는 String.Empty와 같습니다. 나머지 요소에는 명령 줄에 입력 된 추가 토큰이 포함됩니다.
EKanadily 2014

@docesam 많은 도움이되었습니다. 감사합니다! 프로그램 자체를 텍스트로 계속로드하려는 이유가 궁금했습니다.
Kaitlyn 2015-08-29


수년간의 C # 개발 끝에 나는이 방법이 존재한다는 것을 결코 알지 못했습니다. 좋은.
CathalMF

1
이 방법을 사용하는 것과 매개 변수를 보내는 것의 이점이 main(string[] args)있습니까?
Adjit

12

Environment.CommandLine 속성에 액세스하여 .Net 응용 프로그램의 명령 줄을 가져올 수 있습니다. 명령 줄은 단일 문자열로 표시되지만 찾고있는 데이터를 구문 분석하는 것은 그리 어렵지 않습니다.

Main 메서드가 비어 있으면이 속성이나 명령 줄 매개 변수를 추가하는 다른 프로그램의 기능에 영향을주지 않습니다.


26
또는 Main (string [] args)와 같은 인수의 문자열 배열을 반환하는 Environment.GetCommandLineArgs ()를 사용합니다.
Brettski

11

두 개의 인수를 전달해야하는 프로그램을 개발해야한다고 생각하십시오. 먼저 Program.cs 클래스 를 열고 아래와 같이 Main 메서드 에 인수를 추가 하고 이러한 인수를 Windows Form의 생성자에 전달해야합니다.

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 Form 클래스에서 아래와 같이 Program 클래스 의 입력 값을받는 매개 변수화 된 생성자를 추가 합니다.

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

이를 테스트하기 위해 명령 프롬프트를 열고이 exe가있는 위치로 이동할 수 있습니다. 파일 이름을 지정한 다음 parmeter1 parameter2를 지정합니다. 예를 들어 아래를 참조하십시오.

C:\MyApplication>Yourexename p10 5

위의 C # 코드에서 값이있는 Messagebox를 프롬프트합니다 p10 5.


7

다음 서명을 사용합니다. (c #에서) 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");
    }
}

4

이것은 모든 사람에게 인기있는 솔루션은 아니지만 C #을 사용하는 경우에도 Visual Basic의 Application Framework를 좋아합니다.

다음에 대한 참조 추가 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);
    }

}

Main () 루틴을 다음과 같이 수정하십시오.

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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.