2009-08-29 11 views
4

J'ai un formulaire (Form1) qui a un NotifyIcon dessus. J'ai un autre formulaire (Form2) dont j'aimerais changer l'icône de NotifyIcon. Chaque fois que j'utilise ce code, je reçois une icône supplémentaire qui apparaît dans la barre système, au lieu de changer l'icône actuelle:Modifier NotifyIcon sur un formulaire séparé

Form1 (ico est le nom du NotifyIcon):

public string DisplayIcon 
{ 
    set { ico.Icon = new Icon(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Alerts.Icons." + value)); } 
} 

Form2:

Form1 form1 = new Form1(); 
form1.DisplayIcon = "on.ico"; 

Je pense est a quelque chose à voir avec la création d'une nouvelle instance de Form1 sur Form2, mais je ne suis pas sûr de savoir comment accéder à « DisplayIcon » sans le faire. Merci.

UDPATE: Je suis un peu confus sur l'écriture de la propriété personnalisée sur le formulaire 2, serait-il quelque chose comme:

public Form Form1 
{ 
    set {value;} 
} 
+0

J'ajouté le code de la propriété Form1 à mon échantillon. – olle

Répondre

1

Je suppose form1 à un moment donné crée form2. À ce stade, vous pouvez passer une référence de form1 à form2 afin que form2 puisse accéder à la propriété DisplayIcon de form1.

Vous finiriez avec quelque chose comme

//Somewhere in the code of form1 
public void btnShowFormTwoClick(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(); 
    form2.Form1 = this; //if this isn't done within form1 code you wouldn't use this but the form1 instance variable 
    form2.Show(); 
} 

//somewhere in the code of form2 
public Form1 Form1 { get;set;} //To create the property where the form1 reference is storred. 
this.Form1.DisplayIcon = "on.ico"; 
+0

Bravo pour avoir trouvé une solution plus rapidement que ce que j'ai pu! –

1

Votre soupçon est correcte, vous créez une deuxième instance de Form1 qui se traduit par un double NotifyIcon.

Vous avez besoin d'une référence à Form1 à partir de Form2 afin de définir la propriété DisplayIcon sur l'instance correcte.

Une solution possible est de passer la référence de Form1 à Form2 lors de la création de Form2 (je suppose que vous créez Form2 à partir de Form1).

Par exemple:

Form2 form2 = new Form2(); 
form2.Form1 = this; // Form1 is custom property on Form2 that you need to add 
form2.Show(); 

Sur Form2 la propriété personnalisée serait définie comme:

//Note the type is Form1, in order to get to your public DisplayIcon property. 
public Form1 Form1 { get;set;} 
+0

grands esprits se;) – olle

+0

je suis un peu confus sur l'écriture de la propriété personnalisée sur le formulaire 2, serait-il quelque chose comme: forme publique Form1 { set {valeur;} } –

+0

La propriété personnalisée serait défini sur Form2 comme suit: public Form1 Form1 {get; set;} –

Questions connexes