আমি কীভাবে নেট ট্রেড অ্যাপ্লিকেশন তৈরি করতে পারি যা কেবলমাত্র ট্রেস্ট্রে চালিত হয়?


216

উইন্ডোজ ফর্ম অ্যাপ্লিকেশনটি সিস্টেম ট্রেতে চালিত করার জন্য আমাকে কী করতে হবে ?

ট্রেতে হ্রাস করতে পারে এমন অ্যাপ্লিকেশন নয়, কেবল আইনে, সরঞ্জাম টিপস এবং "রাইট ক্লিক" মেনু ছাড়া আর কিছুই নেই এমন ট্রে যা কেবল ট্রেতে বিদ্যমান।



9
বেশিরভাগ উত্তরে কিছু অনুপস্থিত রয়েছে - সেট করতে ভুলবেন না icon.Visible = false, Dispose()আপনার অ্যাপ্লিকেশনটি প্রস্থান করার সময় আইকনটি। অন্যথায় আপনি আপনার প্রোগ্রামটি বেরিয়ে যাওয়ার পরেও আইকনটি দেখতে পাবেন। কয়েকবার পরীক্ষা করার পরে, আপনি আর জানতে পারবেন না, কোন আইকনটি আসল।
টমাসজ গ্যান্ডোর

আপনি যদি আরও আধুনিক ডাব্লুপিএফ পদ্ধতির পরে থাকেন - আপনি এটি ব্যবহার করতে পারেন: কোডেপ্রজেক্ট
মারে ফক্সক্রফ্ট

উত্তর:


85

কোড প্রকল্প নিবন্ধ একটি টাস্কট্রে অ্যাপ্লিকেশন তৈরি করা খুব সহজ ব্যাখ্যা এবং একটি অ্যাপ্লিকেশন তৈরির উদাহরণ দেয় যা কেবলমাত্র সিস্টেম ট্রেতে বিদ্যমান exists

মূলত Application.Run(new Form1());রেখাটি পরিবর্তনের Program.csপরিবর্তে উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসটি শুরু করতে ApplicationContextএবং সেই শ্রেণীর জন্য নির্মাণকারীকে একটি আরম্ভ করার জন্যNotifyIcon

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Application.Run(new MyCustomApplicationContext());
    }
}


public class MyCustomApplicationContext : ApplicationContext
{
    private NotifyIcon trayIcon;

    public MyCustomApplicationContext ()
    {
        // Initialize Tray Icon
        trayIcon = new NotifyIcon()
        {
            Icon = Resources.AppIcon,
            ContextMenu = new ContextMenu(new MenuItem[] {
                new MenuItem("Exit", Exit)
            }),
            Visible = true
        };
    }

    void Exit(object sender, EventArgs e)
    {
        // Hide tray icon, otherwise it will remain shown until user mouses over it
        trayIcon.Visible = false;

        Application.Exit();
    }
}

13
এটি একটি দুর্দান্ত সূচনা পয়েন্ট। নোট করুন যে "অ্যাপিকোন" অবশ্যই এমন একটি সংস্থার নাম হতে হবে যা আপনি "প্রকল্প -> সম্পত্তি -> সংস্থানসমূহ -> সংস্থান যোগ করুন" এর সাথে যুক্ত করবেন এবং তারপরে প্রকল্পটি পুনরায় সংকলন করুন।
লাভামেন্টিস

1
আমি সম্পত্তিগুলি ... রিসোর্সগুলি যোগ করি ... রিসোর্স..আইকন .. পুনরায় সংকলিত পেয়েছি, তবুও "ত্রুটি CS0103 'বর্তমানের প্রসঙ্গে'
রিসোর্সস

@ বার্লপ আমাকে এটি লিখতে হয়েছিল: প্রোপারাইটিস.সংশ্লিষ্ট.অ্যাপকন
সাইমন পেরেলপিতা

@ সিমোনপেরিপলিটস ধন্যবাদ, আমি আমার পরীক্ষাগুলি কী করেছি তা নিশ্চিত নই, আমি কী কাজ করেছি তা মন্তব্য করার অর্থ ছিল তবে আমি যে কিছু কাজ করেছি সেগুলি অবশ্যই ভুলে গিয়েছিলাম। তবে শেষ পর্যন্ত যে পদ্ধতিটি আমি ব্যবহার করেছি তা হ'ল আপনি যে জিনিসগুলিতে টেনে আনতে পারেন সেগুলির প্যালেট থেকে একটি সূক্ষ্ম আইকনটি টানছিলেন। তারপরে ফর্মটিতে এটি ক্লিক করে, একটি তীরটি ক্লিক করুন যা এটির জন্য একটি আইকন বেছে নেওয়ার জন্য একটি মেনু নিয়ে আসে!
বার্লোপ

17

যেমন ম্যাট 1 টি বলেছেন - আপনার অ্যাপ্লিকেশনটিতে আপনাকে একটি বিজ্ঞপ্তি যুক্ত করতে হবে এবং তারপরে টুলটিপ এবং প্রসঙ্গ মেনু সেট করতে নিম্নলিখিত কোডের মতো কিছু ব্যবহার করতে হবে:

this.notifyIcon.Text = "This is the tooltip";
this.notifyIcon.ContextMenu = new ContextMenu();
this.notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Option 1", new EventHandler(handler_method)));

এই কোডটি কেবল সিস্টেম ট্রেতে আইকনটি দেখায়:

this.notifyIcon.Visible = true;  // Shows the notify icon in the system tray

আপনার যদি কোনও ফর্ম থাকে (তবে যে কোনও কারণে) থাকলে নিম্নলিখিতগুলি প্রয়োজন হবে:

this.ShowInTaskbar = false;  // Removes the application from the taskbar
Hide();

প্রসঙ্গ মেনুটি পেতে ডান ক্লিকটি স্বয়ংক্রিয়ভাবে হ্যান্ডেল হয়ে যায়, তবে আপনি যদি বাম ক্লিকটিতে কিছু পদক্ষেপ নিতে চান তবে আপনাকে একটি ক্লিক হ্যান্ডলার যুক্ত করতে হবে:

    private void notifyIcon_Click(object sender, EventArgs e)
    {
        var eventArgs = e as MouseEventArgs;
        switch (eventArgs.Button)
        {
            // Left click to reactivate
            case MouseButtons.Left:
                // Do your stuff
                break;
        }
    }

15

আমি .NET 1.1 সহ একটি ট্রাইবার অ্যাপ লিখেছি এবং আমার কোনও ফর্মের দরকার নেই।
প্রথমত, Mainএকটি মডিউলে সংজ্ঞায়িত উপ হিসাবে প্রকল্পের প্রারম্ভিক অবজেক্টটি সেট করুন ।
তারপরে প্রোগ্রামগতভাবে উপাদানগুলি তৈরি করুন: NotifyIconএবং ContextMenu
একটি MenuItem"প্রস্থান" বা অনুরূপ অন্তর্ভুক্ত করতে ভুলবেন না ।
আবদ্ধ ContextMenuকরার NotifyIcon
দাওয়াত Application.Run()
প্রস্থান করার জন্য প ইভেন্ট হ্যান্ডলার সালে MenuItemসেই বিষয়ে নিশ্চিত থাকুন ডাকতে সেট NotifyIcon.Visible = False, তারপর Application.Exit()। আপনার যা প্রয়োজন তা যুক্ত করুন ContextMenuএবং সঠিকভাবে পরিচালনা করুন :)


11
  1. উইজার্ড দিয়ে একটি নতুন উইন্ডোজ অ্যাপ্লিকেশন তৈরি করুন।
  2. Form1কোড থেকে মুছুন ।
  3. প্রারম্ভিক কোড শুরু করে প্রোগ্রামের কোডগুলি সরান Form1
  4. NotifyIconআপনার সিস্টেম ট্রে আইকন তৈরি করতে শ্রেণিটি ব্যবহার করুন (এটিতে একটি আইকন বরাদ্দ করুন)।
  5. এটিতে একটি প্রসঙ্গমেনু যুক্ত করুন।
  6. বা NotifyIconএর মাউসক্লিকের প্রতিক্রিয়া জানুন এবং ডান এবং বাম ক্লিকের মধ্যে পার্থক্য করুন, আপনার প্রসঙ্গমেনুটি সেট করুন এবং এটি দেখান যে কোন বারের জন্য (ডান / বাম) চাপানো হয়েছিল।
  7. Application.Run()Application.Exit()ছাড়ার জন্য অ্যাপটি চালিয়ে যেতে। বা ক bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}। তারপরে bRunning = false;অ্যাপটি থেকে বেরিয়ে আসার জন্য সেট করুন।

আপনি যখন মেইনের শেষ প্রান্তে পৌঁছান এবং কোনও ইউআই থ্রেড না থাকে তখন প্রোগ্রামটি সম্পাদন বন্ধ করে দেয়। আপনি কীভাবে এটি যত্নবান হন আপনার সমাধান? যদি আপনি এই সমস্যাগুলি সমাধান করেন তবে আপনি আমার ভোট পান :)
ম্যাথু স্টিপলস

আপনি আমার ভোট পান। সম্ভবত কেবল উল্লেখ করুন যে আপনাকে এখনও অ্যাপ্লিকেশন কল করতে হবে any কোনও প্যারাম ছাড়াই চালাবেন?

অ্যাপ.রুনের বিকল্প সহ আপডেট হয়েছে।
ওল্ফ 5

থ্রেড.স্লিপ ওভারকিল আমি জানি, তবে আপনার কাছে যদি অ্যাপ্লিকেশনটির আরও ভাল "ঘুম" লুপের বিকল্প থাকে তবে এটি পোস্ট করুন :)
ওল্ফ

থ্রেড.স্লিপ একটি খারাপ ধারণা: আপনি কেবলমাত্র অ্যাপ্লিকেশনটি করেছেন তার চেয়ে বেশি সিপিইউ এবং ব্যাটারি ব্যবহার করবেন। আপনি যেমন বোঝাতে চাইছেন তেমন রান করুন।
স্নেফটেল

8

"সিস্টেম ট্রে" অ্যাপ্লিকেশনটি কেবল একটি নিয়মিত জয় ফর্ম অ্যাপ্লিকেশন, কেবলমাত্র পার্থক্য হ'ল এটি উইন্ডোজ সিস্টেম ট্রে অঞ্চলে একটি আইকন তৈরি করে। সিএস.ট্রে আইকনটি নোটিফাইকন উপাদানটি ব্যবহার করার জন্য, আপনি এটি টুলবক্সে (সাধারণ নিয়ন্ত্রণগুলি) খুঁজে পেতে পারেন এবং এর বৈশিষ্ট্যগুলি সংশোধন করতে পারেন: আইকন, সরঞ্জাম টিপ। এছাড়াও এটি আপনাকে মাউস ক্লিক এবং ডাবল ক্লিক বার্তাগুলি পরিচালনা করতে সক্ষম করে।

এবং আরও একটি জিনিস, চেহারা এবং অনুভূতি অর্জনের জন্য বা স্ট্যান্ডার্ড ট্রে অ্যাপ্লিকেশন। আপনার মূল ফর্ম শো ইভেন্টে ফলোইনফ লাইন যুক্ত করুন:

private void MainForm_Shown(object sender, EventArgs e)
{
    WindowState = FormWindowState.Minimized;
    Hide();
} 

6

যতদূর আমি অবগত রয়েছি আপনাকে ফর্মটি ব্যবহার করে এখনও অ্যাপ্লিকেশনটি লিখতে হবে, তবে ফর্মটির কোনও নিয়ন্ত্রণ নেই এবং এটি কখনই দৃশ্যমান সেট করে না। আপনার অ্যাপ্লিকেশন লেখার জন্য নোটিফাইকন (একটি এমএসডিএন নমুনা যা এখানে পাওয়া যাবে ) ব্যবহার করুন।


1
বেশ না। আপনার ফর্মগুলিতে নিয়ন্ত্রণ থাকতে পারে তবে এটি ডিফল্টরূপে লুকানো উচিত।
রুন গ্রিমস্টাড

5
আপনার কোনও ফর্মের দরকার নেই। নতুন উইন্ডো অ্যাপ তৈরির উইজার্ডের পরে, কেবল ফর্ম 1 মুছুন এবং কোডটি খোলার অপসারণ করুন। আপনি এগুলি NotifyIcon এবং ContextMenu এর সাথে প্রোগ্রাম.c থেকে সমস্ত লিখতে পারেন। এর চেয়ে বেশি কিছু দরকার নেই।
ওল্ফ 5

1
আমি জানি এটিতে নিয়ন্ত্রণ থাকতে পারে তবে ওপি এটি চায় না
ম্যাথু স্টিপলস

2

আমি ভিজুয়াল স্টুডিও 2010 , নেট 4 এর মাধ্যমে এটি কীভাবে করেছি তা এখানে

  1. একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন তৈরি করুন, বৈশিষ্ট্যগুলিতে 'একক উদাহরণ প্রয়োগ করুন' সেট করুন
  2. একটি প্রসঙ্গমেনুস্ট্রিপ যুক্ত করুন
  3. প্রসঙ্গ মেনু স্ট্রিপে কিছু এন্ট্রি যুক্ত করুন, হ্যান্ডলারগুলি পেতে তাদের উপর ডাবল ক্লিক করুন, উদাহরণস্বরূপ, 'প্রস্থান' (ডাবল ক্লিক) -> হ্যান্ডলার -> me. ক্লোজ ()
  4. আপনি স্রেফ তৈরি করেছেন এমনটিতে ডিজাইনার সেট প্রসঙ্গে মেনুস্ট্রিপটিতে একটি নোটফিইকন যুক্ত করুন, একটি আইকন বাছুন (আপনি 'সাধারণ 7 ...' এর অধীনে ভিজ্যুয়ালস্টুডিও ফোল্ডারে কিছু খুঁজে পেতে পারেন)
  5. ডিজাইনারে ফর্মের জন্য বৈশিষ্ট্যগুলি সেট করুন: ফর্মবোর্ডার স্টাইল: কোনওটি নয়, শোআইকন: মিথ্যা, শোআইনটাস্কবার: মিথ্যা, অস্বচ্ছতা: 0%, উইন্ডোস্টেট: ছোট করা
  6. ফর্ম 1_লুডের শেষে Me.Visible = মিথ্যা যুক্ত করুন, এটি Ctrl+ ব্যবহার করার সময় আইকনটি আড়াল করবেTab
  7. চালান এবং প্রয়োজন হিসাবে সামঞ্জস্য করুন।

2

এটি নোটিফিকেশন এরিয়া অ্যাপ্লিকেশনটির জন্য খুব বন্ধুত্বপূর্ণ কাঠামো ... এটি বেস ফর্মটিতে নোটিফিকেশন আইকন যুক্ত করতে এবং নীচে কোডে স্বয়ংক্রিয়ভাবে উত্পন্ন কোড পরিবর্তন করার জন্য যথেষ্ট:

public partial class Form1 : Form
{
    private bool hidden = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.ShowInTaskbar = false;
        //this.WindowState = FormWindowState.Minimized;
        this.Hide();
        hidden = true;
    }

    private void notifyIcon1_Click(object sender, EventArgs e)
    {
        if (hidden) // this.WindowState == FormWindowState.Minimized)
        {
            // this.WindowState = FormWindowState.Normal;
            this.Show();
            hidden = false;
        }
        else
        {
            // this.WindowState = FormWindowState.Minimized;
            this.Hide();
            hidden = true;
        }
    }
}

-2

সহজভাবে যুক্ত করুন

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;

আপনার ফর্ম অবজেক্টে। আপনি সিস্টেম ট্রেতে কেবল একটি আইকন দেখতে পাবেন।


এটি ফর্মটি টাস্কবারের উপরে রাখে । একই জিনিস না। আপনি কি অন্য পোস্টে সাড়া দেওয়ার চেষ্টা করছেন?
লার্সটেক

1
টাস্কবারে একটি আইকন নেই, আমরা ফর্মটি দেখি না। দৃশ্যমান প্রোগ্রামটি কেবল সিস্টেম ট্রেতে বিদ্যমান। কি উপরে মানে?
YTerle

আপনার উত্তরে কোনও প্রসঙ্গ নেই। আপনি কি NotifyIcon ক্লাস ব্যবহার করছেন? যদি তা না হয় তবে আপনার ফর্মটি টাস্ক বারের উপরে নীচে বাম কোণে ছোট করে ফেলেছে।
লার্সটেক

1
আপনি যদি ব্যস্ত না হন তবে দয়া করে এটি লেখার চেষ্টা করুন run
YTerle
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.