Applicazione C # WinForms con molte icone del vassoio

Sono super nuovo di C # e questa è la mia terza domanda qui a riguardo.

Sto creando un’app che può essere ridotta a icona nella barra delle applicazioni. Ho due forms denominate Form1 e Form2 . Quello che ho fatto finora è:

In Form1 , ho un pulsante che mostra il Form2 utilizzando questo codice:

 this.Hide(); Form2 form2 = new Form2(); form2.Show(); 

Il Form2 ha un pulsante che lo nasconde, usando questo codice:

 this.Hide(); 

Ora ho l’icona del vassoio sulla barra delle applicazioni. L’icona del vassoio ha un ContexMenuStrip , e c’è un’opzione chiamata show che usa questo codice:

 Form1 form1 = new Form1(); form1.Show(); 

Il problema è che quando clicco su di esso, una seconda icona del vassoio appare sulla barra delle applicazioni. Entrambe le icone del vassoio hanno lo stesso menu e funzionano entrambe. Se faccio clic su mostra un’altra finestra con Form1 si apre, e ci sono tre icone del vassoio e così via ….

Qualcuno può aiutarmi?

È perché stai creando un nuovo Form1 ogni volta.

 Form1 form1 = new Form1(); 

Non vuoi creare un nuovo Form1, vuoi mostrare quello vecchio. Assegna a Form2 un riferimento al tuo primo form1 (chiamalo ilMainform1 per esempio). E poi invece di

 Form1 form1 = new Form1(); form1.Show(); 

Vuoi fare

 theMainform1.Show(); 

Quindi avresti:

  this.Hide(); Form2 form2 = new Form2(); form2.theMainform1 = this; form2.Show(); 

Il problema è che si sta creando una nuova istanza di Form1. Questo crea una nuova finestra invece di far rivivere il tuo vecchio.

 Form1 form1 = new Form1(); form1.Show(); 

È necessario che Form2 faccia riferimento all’istanza originale di Form1. Puoi fare in modo che un costruttore passi una referenza che assomiglierebbe

 Form2 form2 = new Form2(this); 

È ansible impedire a Windows di avere icone nella barra delle applicazioni impostando ShowInTaskbar su false nel modulo. Tuttavia, le altre risposte sono corrette quando dicono che stai creando un nuovo modulo più e più volte.

Perché dovresti mostrare due moduli contemporaneamente? Dovrebbero essere entrambi sullo schermo contemporaneamente e essere attivi allo stesso tempo? In tal caso, potresti provare un’interfaccia MDI. http://en.wikipedia.org/wiki/Multiple_document_interface

È ansible in WinForms, ma penso che Microsoft si stia allontanando da loro in WPF.

Ecco un codice funzionante nel caso qualcuno lo stia cercando:

Form1:

 /* Hiding Form1 and showing Form2 */ private void btnHideForm1_Click(object sender, EventArgs e) { Form mod = new Form2(); mod.Owner = this; mod.Show(); this.Hide(); } 

Form2:

  /* Hiding Form2 and showing Form1 */ private void btnHideForm2_Click(object sender, EventArgs e) { this.Owner.Show(); this.Close(); } 

Grazie per il vostro aiuto ragazzi!!!

TI AMO!!!