2009-07-24 14 views
71

मेरे पास दो अलग WinForms अनुप्रयोग हैं, ऐपए & ऐपबी। दोनों .NET 2.0 चल रहे हैं।मैं WinForms एप्लिकेशन में कमांड लाइन तर्क कैसे पास करूं?

ऐपए में मैं एपबी खोलना चाहता हूं, लेकिन मुझे इसे कमांड लाइन तर्क पास करने की आवश्यकता है। मैं कमांड लाइन में पास किए गए तर्कों का उपभोग कैसे करूं?

यह ऐपबी में मेरी वर्तमान मुख्य विधि है, लेकिन मुझे नहीं लगता कि आप इसे बदल सकते हैं?

static void main() 
    { 
    } 

उत्तर

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

तर्क तो args स्ट्रिंग सरणी में संग्रहीत किया जाएगा:

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

इनपुट: "जो भी .exe -v foo/lol nisp"। आउटपुट: तर्क [0] = "-v"; तर्क [1] = "foo"; तर्क [2] = "/ एलओएल"; तर्क [3] = "निस्संदेह"; क्या आसान हो सकता है? –

+0

@AlexeiLevenkov: बहुत बहुत धन्यवाद! किसी ने कुछ महीने पहले संपादित किया था, और मुझे एहसास नहीं हुआ कि यह गलत था। उपर्युक्त उदाहरण कोड से सत्यापित किया गया है कि, वास्तव में, पहली सरणी प्रविष्टि पहला तर्क है, और निष्पादन योग्य का नाम चित्र में प्रवेश नहीं करता है। – Thomas

+0

विश्वास नहीं कर सकता मैंने देखा कि 'स्ट्रिंग [] args' पूरे साल के बाद कई बार और यह कभी मेरे लिए कभी नहीं हुआ wtf यह अब तक था! हाहा – Niklas

12

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

एक खाली मुख्य विधि होने से इस संपत्ति या कमांड लाइन पैरामीटर जोड़ने के लिए किसी अन्य प्रोग्राम की क्षमता प्रभावित नहीं होगी। स्थिर शून्य मुख्य (स्ट्रिंग [] args) (सी # में)

यह लेख के रूप में अच्छी तरह से प्रोग्रामिंग में मुख्य कार्य की भूमिका की व्याख्या करने में मदद कर सकते हैं::

+24

या पर्यावरण का उपयोग करें। GetCommandLineArgs() जो मुख्य (स्ट्रिंग [] args) जैसे तर्कों की एक स्ट्रिंग सरणी देता है – Brettski

7

आप इस हस्ताक्षर का उपयोग 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"); 
    } 
} 
122

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

string[] args = Environment.GetCommandLineArgs(); 

आप शायद अपने कोड बेस througout सरणी के उपयोग को मजबूत करने के लिए enum के उपयोग के साथ इसे जोड़ सकते हैं।

"और आप अपने आवेदन में यह कहीं भी उपयोग कर सकते हैं, तो आप सिर्फ एक कंसोल आवेदन में की तरह main() प्रणाली में इसका उपयोग करने तक ही सीमित नहीं हैं।"

में मिला: HERE

+16

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

+0

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

+0

एमएसडीएन पर: [पर्यावरण। गेट कमांडलाइनलाइन विधि()] (https://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs (v = vs.110) .aspx) – DavidRR

5

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

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; 
5

विचार करें कि आपको एक प्रोग्राम विकसित करने की आवश्यकता है जिसके माध्यम से आपको दो तर्क पारित करने की आवश्यकता है। सबसे पहले, आपको प्रोग्राम.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); 
} 

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

C:\MyApplication>Yourexename p10 5 

देखते हैं, यह मूल्य p10 5 साथ एक संदेशबॉक्स संकेत देगा।

संबंधित मुद्दे