Изменить NotifyIcon в отдельной форме - PullRequest
4 голосов
/ 29 августа 2009

У меня есть форма (Form1), на которой есть NotifyIcon. У меня есть другая форма (Form2), с которой я хотел бы изменить значок NotifyIcon. Всякий раз, когда я использую этот код, я получаю дополнительный значок, который появляется в системном трее, вместо изменения текущего значка:

Форма 1 (ico - имя 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";

Я подозреваю, что это как-то связано с созданием нового экземпляра Form1 в Form2, но я не уверен, как получить доступ к «DisplayIcon» без этого. Спасибо.

UDPATE: я немного запутался в написании пользовательского свойства в форме 2, будет ли это что-то вроде:

public Form Form1
{
    set {value;}
}

Ответы [ 2 ]

1 голос
/ 29 августа 2009

Ваше подозрение верно, вы создаете второй экземпляр Form1, который приводит к дублированию NotifyIcon.

Вам нужна ссылка на Form1 из Form2, чтобы установить свойство DisplayIcon для правильного экземпляра .

Возможное решение - передать ссылку из Form1 в Form2 при создании Form2 (я полагаю, вы создаете Form2 из Form1).

Например:

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

В Form2 пользовательское свойство будет определено как:

 //Note the type is Form1, in order to get to your public DisplayIcon property. 
 public Form1 Form1 { get;set;} 
1 голос
/ 29 августа 2009

Я предполагаю, что form1 в один момент создает form2. В этот момент вы можете передать ссылку form1 на form2, чтобы form2 мог получить доступ к свойству DisplayIcon формы form1.

Таким образом, вы бы получили что-то вроде

//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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...