Parameterübergabe an eine Windows Forms Anwendung



  • Hallo,

    ich suche ein einfaches Beispiel für Parameter-Übergabe an eine Windows Forms Anwendung. Die Anwendung soll gestartet werden, indem eine Datei per drag-and-drop auf die Anwendung gezogen wird.
    Für eine Konsolen-Anwendung ist mir klar wie das geht, siehe unten. Ich suche jetzt das gleiche für eine Windows Forms Anwendung.

    Gruß
    Michael

    using System;
    using System.IO;
    
    namespace Show_Parameters
    {
        public class Program
        {
            static void Main(string[] args)
            {
                if (args.Length == 0)
                     Console.WriteLine("No parameters were passed");                
                else
                {
                    Console.WriteLine("These parameters were passed:");
                    foreach (string s in args)
                        Console.WriteLine(s);
                }
                Console.Read();
            }
        }
    }
    


  • Environment.GetCommandLineArgs ist vermutlich, das, was du suchst. Es kapselt das, was GetCommandLine bzw. CommandLineToArgv liefert.



  • danke, genau das habe ich gesucht.

    Michael



  • Es spielt keinen Unterschied, ob Konsolen- oder WinForms-Anwendung. Bei beiden kannst du void Main(string[] args) verwenden.



  • Ich hatte das probiert, aber das ging nicht. Braucht man dafür eine bestimmte using Anweisung?

    Michael



  • Für string brauchst du using System; (aber das sollte schon in der Vorlage vorhanden sein).
    Was für eine Fehlermeldung erhältst du denn?



  • Das ursprüngliche Problem habe ich zwar schon mit Environment.GetCommandLineArgs gelöst, aber ich habe jetzt nochmal ein neues Test-Projekt erstellt weil mich der andere Lösungsweg auch interessiert.
    In der Datei Program.cs steht zunächst

    static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
    

    Das kann ich ändern in

    static void Main(string[] args)
    

    Das Problem ist, dass die Variable args an der Stelle wo ich sie abfragen möchte (in Form1.cs in Form1_Shown) nicht bekannt ist.

    Michael



  • Ich habe es jetzt herausgefunden wie das geht:

    Program.cs

    using System;
    using System.Windows.Forms;
    
    namespace test
    {
        static class Program
        {
            /// <summary>
            /// Der Haupteinstiegspunkt für die Anwendung.
            /// </summary>
            [STAThread]
            static void Main(string[] args)            // Diese Zeile muss modifiziert werden
            {     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1(args));      // Diese Zeile muss modifiziert werden
            }
        }
    }
    

    Form1.cs

    using System;
    using System.Windows.Forms;
    
    namespace test
    {
        public partial class Form1 : Form
        {
            string[] arguments;
    
            public Form1(string[] args)
            {
                InitializeComponent();
                arguments = args;
            }
    
            private void Form1_Shown(object sender, EventArgs e)
            {            
                foreach (string s in arguments)
                    richTextBox1.AppendText(s + "\n");            
            }
        }
    }
    

Log in to reply