1

別のフォームからのトレイ通知が必要です。ControlPanel.cs (デフォルト フォーム、ここでは通知アイコン):

  ...
  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");
}

、トレイポップアップが表示されますが、2番目のトレイアイコンが作成され、新しいアイコンからバルーンヒントが表示されます。私に何ができる?PS: 下手な英語で申し訳ありません。

4

3 に答える 3

2

ControlPanel から 2 番目のフォーム "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;は初期化されていないため、null 参照があります。ControlPanel にアクセスするには、有効な参照を設定する必要があります。ControlPanel.cs が別のフォームにある場合は、そこからその参照を取得する必要があります。パブリック プロパティまたはインターフェイスを介して。

于 2011-11-21T06:33:09.673 に答える