98 votes

Comment passer des arguments de ligne de commande à une application WinForms?

J'ai deux applications WinForms différentes, AppA et AppB. Les deux exécutent .NET 2.0.

Dans AppA, je souhaite ouvrir AppB, mais je dois lui transmettre des arguments de ligne de commande. Comment utiliser les arguments que je passe en ligne de commande?

Ceci est ma principale méthode actuelle dans AppB, mais je ne pense pas que vous puissiez changer cela?

   static void main()
  {
  }
 

181voto

Hannibul33 Points 101

La meilleure façon de travailler avec des arguments pour votre application winforms est d'utiliser

string[] args = Environment.GetCommandLineArgs();

Vous pouvez probablement couple cela avec l'utilisation d'un enum pour solidifier l'utilisation de la matrice à travers votre base de code.

"Et vous pouvez l'utiliser n'importe où dans votre application, vous n'êtes pas juste limités à l'utilisation dans la méthode main() comme dans une console l'application".

Trouvé à:ICI

114voto

Thomas Points 63635
 static void Main(string[] args)
{
}
 

Les arguments seront alors stockés dans le tableau de chaînes args. Exemple d'argument ci-dessous

 myfile.exe /showall -v test

args[0] = "/showall";
args[1] = "-v";
args[2] = "test";
 

12voto

JaredPar Points 333733

Vous pouvez récupérer la ligne de commande de toute application .Net en accédant à la propriété Environment.CommandLine. La ligne de commande sera une seule chaîne, mais l'analyse des données que vous recherchez ne devrait pas être très difficile.

Le fait d'avoir une méthode Main vide n'affectera pas cette propriété ni la capacité d'un autre programme d'ajouter un paramètre de ligne de commande.

7voto

chrisghardwick Points 185

Vous utilisez cette signature: (en c #) static void Main (string [] args)

Cet article peut également aider à expliquer le rôle de la fonction principale dans la programmation: http://en.wikipedia.org/wiki/Main_function_(programming )

Voici un petit exemple pour vous:

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

4voto

SchlaWiener Points 9682

Cela peut ne pas être une solution populaire pour tout le monde, mais j'aime bien le cadre d'application dans Visual Basic, même en utilisant C #.

Ajouter une référence à Microsoft.VisualBasic

Créez une classe appelée 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);
    }

}
 

Modifiez votre routine Main () pour ressembler à ceci

 static class Program
{

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

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

Cette méthode offre des fonctionnalités supplémentaires utiles (telles que la prise en charge de SplashScreen et certains événements utiles).

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X