আমি কীভাবে একটি উইন্ডফর্ম অ্যাপ্লিকেশনটিতে কমান্ড-লাইন আর্গুমেন্টগুলি পাস করব?


105

আমার দুটি ভিন্ন উইনফোর্স অ্যাপ্লিকেশন রয়েছে, অ্যাপা এবং অ্যাপবি। দুজনেই চলছে। নেট 2.0।

অ্যাপে আমি অ্যাপবি খুলতে চাই, তবে এটিতে কমান্ড-লাইন যুক্তিগুলি পাস করা দরকার। কমান্ড লাইনে আমি যে যুক্তিগুলি পাস করি সেগুলি কীভাবে গ্রাস করব?

এটি অ্যাপবিতে আমার বর্তমান প্রধান পদ্ধতি, তবে আপনি কি এটি পরিবর্তন করতে পারবেন বলে আমি মনে করি না?

  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
ইনপুট: "যাইহোক.এক্সে -ভি ফু / লোল নিসপ"। আউটপুট: আরগস [0] = "-v"; আরগস [1] = "ফু"; আরগস [2] = "/ লোল"; আরগস [3] = "নিসপ"; এর থেকে সহজ আর কী হতে পারে?
কলম রজার্স

আমি বিশ্বাস করতে পারি না যে আমি পুরো বছর পরে 'স্ট্রিং [] আরগস' দেখেছি এবং এটি আমার কাছে কখনও ঘটেনি ডাব্লুটিএফ এখন অবধি ছিল না! হাহা
নিক্লাস

1
দেখে মনে হচ্ছে অ্যাপ্লিকেশন চলমানের পুরো পাথ এবং এক্সিম নাম আরগস [0] হ'ল প্রথম পরামিতি।
অ্যালান এফ

197

আপনার উইনফর্মস অ্যাপ্লিকেশনটির জন্য আরগগুলি নিয়ে কাজ করার সর্বোত্তম উপায়টি হ'ল ব্যবহার করা

string[] args = Environment.GetCommandLineArgs();

আপনার কোড বেসটি অ্যারে থ্রাগআউটকে আরও শক্ত করতে একটি এনাম ব্যবহার করে আপনি সম্ভবত এটি দ্বিগুণ করতে পারেন।

"এবং আপনি এটি আপনার অ্যাপ্লিকেশনের যে কোনও জায়গায় ব্যবহার করতে পারেন, আপনি এটি কনসোল অ্যাপ্লিকেশনের মতো মূল () পদ্ধতিতে ব্যবহার করতে সীমাবদ্ধ নন" "

এখানে পাওয়া: এখানে


25
অ্যারেতে প্রথম উপাদানটিতে এক্সিকিউটিভ প্রোগ্রামের ফাইলের নাম থাকে। যদি ফাইলের নাম উপলভ্য না হয় তবে প্রথম উপাদানটি স্ট্রিংএম্পটির সমান mp বাকি উপাদানগুলিতে কমান্ড লাইনে প্রবেশ করা কোনও অতিরিক্ত টোকেন থাকে।
একনাদিলি

@ডোসাম যা আমাকে অনেক সাহায্য করেছে, ধন্যবাদ! কেন এটি প্রোগ্রামটিকে নিজেই পাঠ্য হিসাবে লোড করার চেষ্টা করে চলেছে তা ভাবছিল।
ক্যাটলিন


কয়েক বছরের সি # বিকাশের পরে আমি জানতাম না যে এই পদ্ধতির অস্তিত্ব রয়েছে। খুশী হলাম।
ক্যাথালএমএফ

1
প্যারামিটারগুলি প্রেরণ করে এই পদ্ধতিটি ব্যবহার করার কোনও সুবিধা আছে main(string[] args)?
আদিত

12

এনভায়রনমেন্ট.কমন্ডলাইন সম্পত্তি অ্যাক্সেস করে আপনি যে কোনও নেট অ্যাপ্লিকেশনটির কমান্ড লাইনটি ধরতে পারেন। এটিতে একক স্ট্রিং হিসাবে কমান্ড লাইন থাকবে তবে আপনি যে ডেটাটির সন্ধান করছেন তা পার্স করা ভয়ানক কঠিন হওয়া উচিত নয়।

একটি খালি মূল পদ্ধতি থাকা এই সম্পত্তি বা কোনও প্রোগ্রামের কমান্ড লাইন প্যারামিটার যুক্ত করার উপর প্রভাব ফেলবে না।


26
অথবা এনভায়রনমেন্ট.গেটকম্যান্ডলাইনআরগস () ব্যবহার করুন যা মেইন (স্ট্রিং [] আরগস) এর মতো আর্গুমেন্টের একটি স্ট্রিং অ্যারে প্রদান করে
ব্রেটস্কি

11

আপনার এমন একটি প্রোগ্রাম বিকাশ করতে হবে যা আপনাকে দুটি যুক্তি পাস করার প্রয়োজন তা বিবেচনা করুন। প্রথমত, আপনাকে প্রোগ্রাম.এস ক্লাস খুলতে হবে এবং নীচের মত মূল পদ্ধতিতে যুক্তি যুক্ত করতে হবে এবং এই যুক্তিগুলি উইন্ডোজ ফর্মটির নির্মাতার কাছে প্রেরণ করতে হবে।

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

এটি পরীক্ষা করার জন্য, আপনি কমান্ড প্রম্পটটি খুলতে এবং যেখানে এই এক্স স্থাপন করা হয়েছে সেখানে যেতে পারেন। ফাইলের নাম দিন তারপর প্যারামিটার 1 প্যারামিটার 2। উদাহরণস্বরূপ, নীচে দেখুন

C:\MyApplication>Yourexename p10 5

উপরের সি # কোড থেকে এটি মান সহ একটি মেসেজবক্স প্রম্পট করবে p10 5


7

আপনি এই স্বাক্ষরটি ব্যবহার করুন: (সি # তে) স্ট্যাটিক অকার্যকর মূল (স্ট্রিং [] আরগস)

এই নিবন্ধটি প্রোগ্রামিংয়ে মূল ফাংশনের ভূমিকাও ব্যাখ্যা করতে সহায়তা করতে পারে: http://en.wikedia.org/wiki/Main_function_ ( প্রোগ্রাম )

আপনার জন্য এখানে একটি সামান্য উদাহরণ দেওয়া হয়েছে:

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

উইন্ডোজফরমস অ্যাপ্লিকেশন নামে একটি ক্লাস তৈরি করুন

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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.