1

我需要另一个表格的托盘通知。ControlPanel.cs(默认形式,此处为 notifyicon):

  ...
  public partial class ControlPanel : Form
    {
        public string TrayP
        {
            get { return ""; }
            set { TrayPopup(value, "test");}

        }

   public void TrayPopup(string message, string title)
    {
        TrayIcon.BalloonTipText = message;
        TrayIcon.BalloonTipTitle = title;
        TrayIcon.ShowBalloonTip(1);
    }

Form1.cs(另一种形式):

...
public partial class Form1 : Form
{

    public ControlPanel cp;
    ....

    private void mouse_Up(object sender, MouseEventArgs e) {
        cp.TrayP = "TRAY POPUP THIS";
    }

在网上cp.TrayP = "TRAY POPUP THIS";我得到一个 NullException。如果我将其更改为cp.TrayPopup("TRAY POPUT THIS", "test");异常抛出任何东西。

如果我这样做:

private void mouse_Up(object sender, MouseEventArgs e) {
    var CP = new ControlPanel();
    CP.TrayPopup("TRAY POPUP THIS", "test");
}

,托盘弹出显示,但它会创建第二个托盘图标,然后从新图标显示气球提示。我能做些什么?PS:抱歉英语不好。

4

3 回答 3

2

如果您从 ControlPanel 打开第二个表单“Form1”,您应该将 CP 的实例传递给 Form1,例如

public partial class ControlPanel : Form
{

    public void ShowForm1(){
        FOrm1 f1 = new Form1();
        f1.SetCp(this);
        f1.show();
    }

    public void TrayPopup(string message, string title)
    {
        TrayIcon.BalloonTipText = message;
        TrayIcon.BalloonTipTitle = title;
        TrayIcon.ShowBalloonTip(1);
    }
}

public partial class Form1 : Form
{

    public ControlPanel _cp;
    public void SetCP(controlPanel cp){
            _cp = cp;
    }

    private void mouse_Up(object sender, MouseEventArgs e) {
            if(_cp != null)
            _cp.TrayPopup("TRAY POPUP THIS", "test");
    }
}
于 2011-11-21T06:37:32.290 回答
0

不需要每次都分配内存,试试这个

public partial class Form1 : Form
{

    public ControlPanel cp = new ControlPanel();
    ....

    private void mouse_Up(object sender, MouseEventArgs e) {   
    CP.TrayPopup("TRAY POPUP THIS", "test");
    }
}
于 2011-11-21T06:31:33.093 回答
0

您的public ControlPanel cp;变量具有空引用,因为它从未初始化。为了访问 ControlPanel,您需要设置对它的有效引用。如果您的 ControlPanel.cs 在另一个表单上,您需要从那里获取该引用。通过公共属性或接口。

于 2011-11-21T06:33:09.673 回答