ridurre a icona l'app nella barra delle applicazioni


114

Ho un'app Windows Form con tecnologia C # e Visual Studio 2010.

Come posso ridurre a icona la mia app nella barra delle applicazioni (non nella barra delle applicazioni), quindi ripristinarla quando si fa doppio clic nella barra delle applicazioni? qualche idea? inoltre, come posso creare un menu nell'icona nella barra delle applicazioni e quando faccio clic con il pulsante destro del mouse, mostra un menu come Login, Disconnect, Connect, qualcosa del genere. Inoltre, ci sono metodi per mostrare come un palloncino che spunta dalla barra delle applicazioni?

PS: ho già aggiunto una notifyIcon, ma non so come usarla.


Qui puoi scaricare un ottimo codice di esempio simple-talk.com/dotnet/.net-framework/…
Developer

Vuoi essere sicuro di entrare in Designer.cs del modulo e "registrare" il gestore di eventi o nessuno di questi funzionerà (non sono riuscito a capirlo). Puoi farlo aggiungendo qualcosa del genere: this.Resize + = new System.EventHandler (this.ManagementForm_Resize);
Brad

Risposte:


149

Gestisci l'evento Resize del form. In questo gestore, sovrascrivi la funzionalità di base dell'evento Resize per ridurre a icona il modulo sulla barra delle applicazioni e non sulla barra delle applicazioni. Questa operazione può essere eseguita effettuando le seguenti operazioni nel gestore dell'evento Resize del modulo: Verificare se la proprietà WindowState del modulo è impostata su FormWindowState.Minimized. In caso affermativo, nascondi il modulo, abilita l'oggetto NotifyIcon e mostra il fumetto suggerimento che mostra alcune informazioni. Dopo che WindowState diventa FormWindowState.Normal, disabilitare l'oggetto NotifyIcon impostando la sua proprietà Visible su false. Ora, vuoi che la finestra riappari quando fai doppio clic sull'oggetto NotifyIcon nella barra delle applicazioni. Per questo, gestisci l'evento MouseDoubleClick di NotifyIcon. Qui si mostra il modulo utilizzando il metodo Show ().

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
è possibile modificare la proprietà Form.FormBorderStyle msdn.microsoft.com/en-us/library/...
CD ..

tnx! ha funzionato .. anche qualche idea per disabilitare quei pulsanti minimizza, chiudi, massimizza in alto a destra? tnx
WantIt


tnx ha funzionato anche! inoltre, quando faccio doppio clic sull'icona nella barra delle applicazioni, la finestra non è in primo piano con le altre applicazioni, devo fare uno sforzo facendo clic sulla finestra nella barra delle applicazioni affinché venga visualizzata. Come possiamo gestirlo? tnx così tanto
WantIt


69

Ho trovato questo per realizzare l'intera soluzione. La risposta sopra non riesce a rimuovere la finestra dalla barra delle applicazioni.

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

Inoltre è bene impostare le seguenti proprietà del controllo dell'icona di notifica utilizzando la finestra di progettazione dei moduli.

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
Ti manca this.Show();primathis.WindowState = FormWindowState.Normal;
developerwjk

1
Errore di battitura in "l'utente non fa niente". ;)
Andrew

1
@developerwjk, non manca perché non sta chiamando Hide(). Ma il problema con questo approccio è che la finestra appare ancora quando si preme Alt-Tab. Preferisco chiamare Hide()e in questo modo non devi usare ShowInTaskbaraffatto la proprietà.
Andrew

@Andrew Sto riscontrando problemi durante l'utilizzo di Show()e Hide(); dopo aver nascosto, mostrato e poi nascosto, non verrà più visualizzato.
newbieguy

@newbieguy, immagino che tu debba creare una nuova domanda, poiché il tuo problema non è adatto per un commento su una risposta. Dovrai fornire maggiori informazioni, come il codice che stai utilizzando. Puoi includere un collegamento alla risposta che hai provato a utilizzare.
Andrew

17

Andrei con

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

non dimenticare di aggiungere il file icona alla tua notifyIcon o non apparirà nel vassoio.


la parte più necessaria nell'argomento. Puoi aggiungere qualche informazione in più, come forzarlo a usare l'icona predefinita?
T.Todua,

12

prova questo

 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
Se ti nascondi dalla barra delle applicazioni invece di chiamare this.Hide(), la finestra appare ancora quando fai Alt-Tab.
Andrew

3

Questo è il metodo che utilizzo nelle mie applicazioni, è abbastanza semplice e autoesplicativo ma sono felice di fornire maggiori dettagli in risposta ai vostri commenti.

    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
Questa e altre soluzioni hanno un problema: se il modulo è nascosto sotto altre finestre, molto probabilmente l'utente non vuole ridurlo a icona quando fa clic sull'icona. Invece dovrebbe essere focalizzato. Vedi la mia domanda qui: stackoverflow.com/questions/36797442/…
maf-soft

1

Al clic sull'immagine nella barra delle applicazioni, puoi verificare se il frame è visibile e quindi devi impostare Visible = true o false


1

... e per il menu di notifica del clic destro aggiungi un menu di scelta rapida al modulo e modificalo e imposta gli eventi del clic del mouse per ciascuno dei menu contestuali facendo doppio clic su di essi e quindi allegalo alla notifica1 selezionando il ContextMenuStrip nella proprietà notifyicon.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.