두 가지 WinForms 응용 프로그램, AppA 및 AppB가 있습니다. 둘 다 .NET 2.0을 실행하고 있습니다.
AppA에서 AppB를 열고 싶지만 명령 줄 인수를 전달해야합니다. 명령 줄에서 전달하는 인수를 어떻게 사용합니까?
이것이 AppB의 현재 주요 방법이지만 변경할 수 없다고 생각합니까?
static void main()
{
}
답변
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
답변
winforms 앱에서 args로 작업하는 가장 좋은 방법은 다음을 사용하는 것입니다.
string[] args = Environment.GetCommandLineArgs();
코드베이스 전체에서 배열 사용을 강화하기 위해 열거 형 을 사용하여 이것을 결합 할 수 있습니다 .
“그리고이 기능은 응용 프로그램의 어느 곳에서나 사용할 수 있습니다. 콘솔 응용 프로그램에서와 같이 main () 메서드에서만 사용하도록 제한되지 않습니다.”
발견 위치 : HERE
답변
Environment.CommandLine 속성에 액세스하여 .Net 응용 프로그램의 명령 줄을 가져올 수 있습니다. 명령 줄은 단일 문자열로 표시되지만 찾고있는 데이터를 구문 분석하는 것은 그리 어렵지 않습니다.
Main 메서드가 비어 있으면이 속성이나 명령 줄 매개 변수를 추가하는 다른 프로그램의 기능에 영향을주지 않습니다.
답변
두 개의 인수를 전달해야하는 프로그램을 개발해야한다고 생각하십시오. 먼저 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
.
답변
다음 서명을 사용합니다. (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");
}
}
답변
이것은 모든 사람에게 인기있는 솔루션은 아니지만 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;