मैं 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
इनपुट: "जो भी। ex-foo / lol nisp"। आउटपुट: args [0] = "-v"; आर्ग्स [1] = "फू"; args [2] = "/ lol"; args [3] = "nisp"; क्या आसान हो सकता है?
कैलम रोजर्स

खिचड़ी भाषा का मानना ​​है कि मैंने देखा कि 'स्ट्रिंग [] एक पूरे वर्ष के बाद कई बार' आर्ग 'करता है और यह मुझे कभी नहीं सूझा कि अब यह बेकार था! हाहा
निकलैस

1
ऐसा लगता है कि आर्ग्स [0] चलने वाले एप्लिकेशन का पूर्ण पथ और exe नाम है और args [1] पहला पैरामीटर है।
एलन एफ

197

अपने winforms ऐप के लिए args के साथ काम करने का सबसे अच्छा तरीका उपयोग करना है

string[] args = Environment.GetCommandLineArgs();

आप संभवतः अपने कोड आधार को througout सरणी के उपयोग को ठोस बनाने के लिए एक एनम के उपयोग के साथ इसे जोड़ सकते हैं।

"और आप इसे अपने आवेदन में कहीं भी उपयोग कर सकते हैं, आप इसे मुख्य () विधि जैसे कंसोल एप्लिकेशन में उपयोग करने के लिए प्रतिबंधित नहीं हैं।"

यहां पाया गया: यहां


25
सरणी में पहला तत्व निष्पादन प्रोग्राम का फ़ाइल नाम है। यदि फ़ाइल नाम उपलब्ध नहीं है, तो पहला तत्व String.Empty के बराबर है। शेष तत्वों में कोई अतिरिक्त टोकन कमांड लाइन पर दर्ज किया गया है।
EKanadily

@docesam जिसने मुझे बहुत मदद की, धन्यवाद! सोच रहा था कि यह कार्यक्रम को पाठ के रूप में लोड करने की कोशिश क्यों करता रहा।
कैथलिन


C # विकास के वर्षों के बाद मुझे कभी नहीं पता था कि यह विधि अस्तित्व में है। अच्छा लगा।
कैथलएमएफ

1
वहाँ इस विधि का उपयोग करने के लिए एक लाभ है बनाम मापदंडों को भेजने main(string[] args)?
अदिति

12

आप किसी भी .Net अनुप्रयोग की कमांड लाइन को पर्यावरण से प्राप्त कर सकते हैं। CommandLine गुण। यह एक ही तार के रूप में कमांड लाइन होगा, लेकिन जो डेटा आप देख रहे हैं, उसे बहुत मुश्किल नहीं होना चाहिए।

खाली मेन मेथड इस प्रॉपर्टी या कमांड लाइन पैरामीटर को जोड़ने के लिए किसी अन्य प्रोग्राम की क्षमता को प्रभावित नहीं करेगा।


26
या एनवायरनमेंट का उपयोग करें।
GetCommandLineArgs

11

विचार करें कि आपको एक कार्यक्रम विकसित करने की आवश्यकता है जिसके माध्यम से आपको दो तर्क पारित करने की आवश्यकता है। सबसे पहले, आपको नीचे दिए गए अनुसार Program.cs वर्ग को खोलने और मुख्य विधि में तर्क जोड़ने की आवश्यकता है और इन तर्कों को विंडोज फॉर्म के निर्माता को पास करें।

static class Program
{    
   [STAThread]
   static void Main(string[] args)
   {            
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       Application.Run(new Form1(args[0], Convert.ToInt32(args[1])));           
   }
}

विंडोज़ फॉर्म क्लास में, एक पैरामीटरेड कंस्ट्रक्टर जोड़ें जो प्रोग्राम क्लास से इनपुट मानों को नीचे की तरह स्वीकार करता है ।

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

इसका परीक्षण करने के लिए, आप कमांड प्रॉम्प्ट खोल सकते हैं और उस स्थान पर जा सकते हैं जहां यह एक्सई रखा गया है। फ़ाइल का नाम फिर parmeter1 पैरामीटर 2 दें। उदाहरण के लिए, नीचे देखें

C:\MyApplication>Yourexename p10 5

ऊपर C # कोड से, यह मान के साथ एक मैसेजबॉक्स को संकेत देगा p10 5


7

आप इस हस्ताक्षर का उपयोग करते हैं: (c # में) स्थिर शून्य मुख्य (स्ट्रिंग [] 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

यह सभी के लिए एक लोकप्रिय समाधान नहीं हो सकता है, लेकिन मुझे सी # का उपयोग करते समय भी विज़ुअल बेसिक में एप्लिकेशन फ्रेमवर्क पसंद है।

एक संदर्भ जोड़ें 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);
    }

}

इस तरह दिखने के लिए अपनी मुख्य () दिनचर्या को संशोधित करें

static class Program
{

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

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

यह विधि कुछ अतिरिक्त उपयोगी सुविधाएँ प्रदान करती है (जैसे स्प्लैशस्क्रीन समर्थन और कुछ उपयोगी घटनाएं)

public event NetworkAvailableEventHandler NetworkAvailabilityChanged;d.
public event ShutdownEventHandler Shutdown;
public event StartupEventHandler Startup;
public event StartupNextInstanceEventHandler StartupNextInstance;
public event UnhandledExceptionEventHandler UnhandledException;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.