2009-07-24 38 views

Respuesta

94
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]); 
    } 
} 

Los argumentos a continuación, se almacenan en la matriz args cadena:

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

entrada: "whatever.exe -v foo/lol nisp". Salida: args [0] = "-v"; args [1] = "foo"; args [2] = "/ lol"; args [3] = "nisp"; ¿Qué podría ser más fácil? –

+0

@AlexeiLevenkov: ¡Muchas gracias! Alguien editó eso hace unos meses, y no me di cuenta de que estaba mal. Verificado con el código de ejemplo anterior que, de hecho, la primera entrada de la matriz es el primer argumento, y que el nombre del ejecutable no entra en la imagen. – Thomas

+0

¡No puedo creer que vi tantas veces "string [] args" después de todo un año y nunca se me ocurrió que hasta ahora! jaja – Niklas

12

se puede agarrar la línea de comandos de cualquier aplicación .Net mediante el acceso a la propiedad Environment.CommandLine. Tendrá la línea de comando como una sola cadena, pero analizar los datos que estás buscando no debería ser terriblemente difícil.

Tener un método Principal vacío no afectará esta propiedad o la capacidad de otro programa para agregar un parámetro de línea de comando.

+24

O use Environment.GetCommandLineArgs() que devuelve una matriz de cadenas de argumentos al igual que Main (string [] args) – Brettski

7

Se utiliza esta firma: (en C#) static void main (String [] args)

Este artículo puede ayudar a explicar el papel de la función principal en la programación, así: http://en.wikipedia.org/wiki/Main_function_(programming)

Aquí es un pequeño ejemplo para usted:

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"); 
    } 
} 
122

La mejor manera de trabajar con argumentos para su aplicación WinForms es utilizar

string[] args = Environment.GetCommandLineArgs(); 

Probablemente pueda combinar esto con el uso de enum para solidificar el uso de la matriz a través de su base de código.

"Y se puede utilizar en cualquier lugar en su aplicación, usted no es sólo restringido a usar en el método main() como en una aplicación de consola ."

encontrar en: HERE

+16

El primer elemento de la matriz contiene el nombre de archivo del programa en ejecución. Si el nombre del archivo no está disponible, el primer elemento es igual a String.Empty. Los elementos restantes contienen cualquier token adicional ingresado en la línea de comando. – docesam

+0

@docesam ¡Eso me ayudó mucho, gracias! Me preguntaba por qué seguía intentando cargar el programa en sí mismo como texto. – Kaitlyn

+0

En MSDN: [Environment.GetCommandLineArgs Method()] (https://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs (v = vs.110) .aspx) – DavidRR

5

esto puede no ser una solución popular para todo el mundo, pero me gusta el marco de aplicaciones en Visual Basic, incluso cuando se utiliza C#.

agregar una referencia a Microsoft.VisualBasic

Crear una clase llamada 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); 
    } 

} 

Modificar su rutina principal() para tener este aspecto

static class Program 
{ 

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

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

Este método ofrece algunas características adicionales Utiles (como el soporte de SplashScreen y algunos eventos útiles)

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

Considere que necesita desarrollar un programa mediante el cual debe pasar dos argumentos. En primer lugar, debe abrir la clase Program.cs y agregar argumentos en el método Main como a continuación y pasar estos argumentos al constructor del formulario de 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])));   
    } 
} 

En la clase de forma de ventanas, añadir un constructor con parámetros que acepta los valores de entrada de Programa clase que, como a continuación.

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

Para probar esto, puede abrir el símbolo del sistema y dirigirse a la ubicación donde se encuentra este exe. Indique el nombre del archivo y luego el parámetro parmeter1. Por ejemplo, ver más abajo

C:\MyApplication>Yourexename p10 5 

A partir del código C# anterior, se le pedirá un cuadro de mensaje con el valor p10 5.

Cuestiones relacionadas