एप्लिकेशन को सिस्टम ट्रे में कम करें


114

मेरे पास C # और Visual Studio 2010 द्वारा संचालित एक विंडोज फॉर्म ऐप है।

मैं अपने ऐप को सिस्टम ट्रे (टास्कबार नहीं) में कैसे छोटा कर सकता हूं, फिर सिस्टम ट्रे में डबल क्लिक करने पर इसे वापस ला सकता हूं? कोई उपाय? इसके अलावा, मैं सिस्टम ट्रे में आइकन में कुछ मेनू कैसे बना सकता हूं और जब मैं इसे राइट क्लिक करता हूं, तो यह लॉगिन, डिस्कनेक्ट, कनेक्ट जैसे कुछ मेनू दिखाता है। इसके अलावा, क्या सिस्टम ट्रे से पॉप अप करने वाले एक गुब्बारे की तरह दिखाने के लिए कोई तरीके हैं?

PS: मैंने पहले से ही एक InformIcon जोड़ दिया है, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे करना है।


यहाँ आप एक महान नमूना कोड डाउनलोड कर सकते हैं simple-talk.com/dotnet/.net-framework/…
डेवलपर

आप प्रपत्र के डिज़ाइनर में जाना सुनिश्चित करने जा रहे हैं। इस घटना हैंडलर या "रजिस्टर" में से कोई भी काम नहीं करेगा (मैं यह पता नहीं लगा सका)। आप इसे कुछ इस तरह से जोड़कर कर सकते हैं: यह .Rizeize = = नया System.EventHandler (यह। प्रबंधनफार्मा_Resize);
ब्रैड

जवाबों:


149

फॉर्म का आकार बदलें घटना को संभालें। इस हैंडलर में, आप सिस्टम ट्रे को फॉर्म को कम से कम करने और टास्कबार को न करने के लिए आकार बदलने की घटना की बुनियादी कार्यक्षमता को ओवरराइड करते हैं। यह आपके फ़ॉर्म के आकार बदलने वाले इवेंट हैंडलर में निम्न कार्य करके किया जा सकता है: जांचें कि क्या फॉर्म की WindowState संपत्ति FormWindowState.Minimized पर सेट है। यदि हाँ, अपना फ़ॉर्म छिपाएँ, NotifyIcon ऑब्जेक्ट को सक्षम करें, और गुब्बारा टिप दिखाएं जो कुछ जानकारी दिखाता है। एक बार WindowState FormWindowState.Normal हो जाने के बाद, अपनी Visible प्रॉपर्टी को झूठा करने के लिए NotifyIcon ऑब्जेक्ट को अक्षम करें। अब, आप चाहते हैं कि विंडो दोबारा दिखाई दे जब आप टास्कबार में NotifyIcon ऑब्जेक्ट पर डबल क्लिक करें। इसके लिए, NotifyIcon के माउसडबलक्लिक इवेंट को हैंडल करें। यहां, आप शो () विधि का उपयोग करके फ़ॉर्म दिखाते हैं।

private void frmMain_Resize(object sender, EventArgs e)
{
    if (FormWindowState.Minimized == this.WindowState)
    {
       mynotifyicon.Visible = true;
       mynotifyicon.ShowBalloonTip(500);
       this.Hide();
    }

    else if (FormWindowState.Normal == this.WindowState)
    {
       mynotifyicon.Visible = false;
    }
}

5
आप Form.FormBorderStyle संपत्ति msdn.microsoft.com/en-us/library/…
CD ..

tnx! यह काम किया .. यह भी किसी भी विचार को कम से कम, करीब, शीर्ष सही में अधिकतम बटन को निष्क्रिय करने के लिए? tnx
वांट इट


tnx यह भी काम किया! इसके अलावा, जब मैं सिस्टम ट्रे में आइकन पर डबल क्लिक करता हूं, तो विंडो अन्य अनुप्रयोगों के साथ शीर्ष पर नहीं है, मुझे इसे दिखाने के लिए टास्कबार में विंडो पर क्लिक करके प्रयास करना होगा। हम इसे कैसे संभाल सकते हैं? tnx इतना
वांट इट


69

मुझे यह पूरा समाधान पूरा करने के लिए मिला। कार्य पट्टी से विंडो हटाने में उपरोक्त उत्तर विफल हो जाता है।

private void ImportStatusForm_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        notifyIcon.Visible = true;
        notifyIcon.ShowBalloonTip(3000);
        this.ShowInTaskbar = false;
    }
}

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    this.WindowState = FormWindowState.Normal;
    this.ShowInTaskbar = true;
    notifyIcon.Visible = false;
}

साथ ही फॉर्म डिजाइनर का उपयोग करके सूचित आइकन नियंत्रण के निम्नलिखित गुणों को सेट करना अच्छा है।

this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't think there is an error.
this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]";
this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]";
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use
this.notifyIcon.Text = "[Message shown when hovering over tray icon]";

7
आप this.Show();इससे पहले गायब हैंthis.WindowState = FormWindowState.Normal;
developerwjk

1
"उपयोगकर्ता कोई बात नहीं करता" में टाइपो। ;)
एंड्रयू

1
@developerwjk, यह याद नहीं है क्योंकि वह फोन नहीं कर रहा है Hide()। लेकिन उस दृष्टिकोण के साथ समस्या यह है कि विंडो तब भी दिखाई देती है जब आप Alt-Tab दबाते हैं। मुझे कॉलिंग पसंद है Hide()और इस तरह से आपको ShowInTaskbarप्रॉपर्टी का उपयोग बिल्कुल नहीं करना है ।
एंड्रयू

@ Show()और उपयोग करते समय मुझे समस्या हो रही है Hide(); छुपाने, दिखाने और फिर छुपाने के बाद, यह फिर से नहीं दिखाई देगा।
newbieguy

@newbieguy, मुझे लगता है कि आपको एक नया प्रश्न बनाने की आवश्यकता है, क्योंकि आपकी समस्या किसी उत्तर पर टिप्पणी के लिए एक अच्छी फिट नहीं है। आपको अधिक जानकारी प्रदान करने की आवश्यकता होगी, क्योंकि आप जिस कोड का उपयोग कर रहे हैं। आपके द्वारा उपयोग किए गए उत्तर के लिए एक लिंक शामिल हो सकता है।
एंड्रयू

17

मैं साथ चलूँगा

private void Form1_Resize(object sender, EventArgs e)
{
     if (FormWindowState.Minimized == this.WindowState)
     {
          notifyIcon1.Visible = true;
          notifyIcon1.ShowBalloonTip(500);
          this.Hide();    
     }
     else if (FormWindowState.Normal == this.WindowState)
     {
          notifyIcon1.Visible = false;
     }
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
     this.Show();
     this.WindowState = FormWindowState.Normal;
}

17

अपने नोटिफ़िकेशन में आइकन फ़ाइल जोड़ना न भूलें या यह ट्रे में दिखाई नहीं देगा।


विषय में सबसे आवश्यक हिस्सा। क्या आप थोड़ी और जानकारी जोड़ सकते हैं, इसे डिफ़ॉल्ट आइकन का उपयोग करने के लिए कैसे मजबूर किया जाए?
टोडुआ

12

इसे इस्तेमाल करे

 private void Form1_Load(object sender, EventArgs e)
    {
        notifyIcon1.BalloonTipText = "Application Minimized.";
        notifyIcon1.BalloonTipTitle = "test";
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        if (WindowState == FormWindowState.Minimized)
        {
            ShowInTaskbar = false;
            notifyIcon1.Visible = true;
            notifyIcon1.ShowBalloonTip(1000);
        }
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ShowInTaskbar = true;
        notifyIcon1.Visible = false;
        WindowState = FormWindowState.Normal;
    }

1
यदि आप कॉल करने के बजाय केवल टास्कबार से छिपते हैं this.Hide(), तो विंडो तब भी दिखाई देती है जब Alt-Tab कर रहा होता है।
एंड्रयू

3

यह वह तरीका है जो मैं अपने अनुप्रयोगों में उपयोग करता हूं, यह काफी सरल और आत्म व्याख्यात्मक है लेकिन मुझे आपकी टिप्पणियों के जवाब में अधिक विवरण देने में खुशी हो रही है।

    public Form1()
    {
        InitializeComponent();

        // When window state changed, trigger state update.
        this.Resize += SetMinimizeState;

        // When tray icon clicked, trigger window state change.       
        systemTrayIcon.Click += ToggleMinimizeState;
    }      

    // Toggle state between Normal and Minimized.
    private void ToggleMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;
        this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized;
    }

    // Show/Hide window and tray icon to match window state.
    private void SetMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;

        this.ShowInTaskbar = !isMinimized;           
        systemTrayIcon.Visible = isMinimized;
        if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info);
    }

2
इस और अन्य समाधानों में एक समस्या है: यदि प्रपत्र अन्य विंडो के नीचे छिपा हुआ है, तो उपयोगकर्ता सबसे अधिक संभावना नहीं है कि वह आइकन पर क्लिक करते समय इसे कम से कम करे। इसके बजाय इसे केंद्रित किया जाना चाहिए। मेरा प्रश्न यहाँ देखें: stackoverflow.com/questions/36797442/…
maf-soft

1

सिस्टम ट्रे में छवि पर क्लिक करने पर, आप पुष्टि कर सकते हैं कि क्या फ्रेम दिखाई दे रहा है और फिर आपको दृश्यमान = सही या गलत सेट करना होगा


1

... और आपके राइट क्लिक के लिए सूचना मेनू फॉर्म में एक संदर्भ मेनू जोड़ते हैं और इसे संपादित करते हैं और प्रत्येक संदर्भ प्रसंग के लिए मूसलीक इवेंट्स को डबल क्लिक करके सेट करते हैं और फिर इसे Informicon1 में ContextMenuStrip से Informicon संपत्ति का चयन करके संलग्न करते हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.