如何从另一个类访问notifyIcon

时间:2012-04-25 14:47:10

标签: c# winforms

我的主要表单上有一个notifyIcon,并希望从另一个类设置baloontip。现在我收到以下错误:The name 'TaskbarIcon' does not exist in the current context

现在这是有道理的,因为它不在范围内,但我仍然可以访问它?我需要一个界面吗?根据{{​​3}},我确实需要一个(但它是一个文本框),你可以传递一个字符串,而使用baloontip我需要传递更多的参数:ShowBalloonTip(2000, "Nu:", result[0] + " - " + result[1], ToolTipIcon.Info);

public System.Windows.Forms.NotifyIcon TaskbarIcon;

声明

1 个答案:

答案 0 :(得分:1)

您需要引用您的Main表单,该表单需要传递给您的类(可能在构造函数中):

public class MyClass
{
    private Form Main { get; set; }

    public MyClass(Form main, ...)
    {
        Main = main;
    }
}

然后你打电话给你班上的项目:

private method DoSomething(...)
{
    Main.TaskbarIcon.ShowBalloonTip(...);
}

然而,正如你mentioned一样,最好在你的班级和实际对象之间放置一些东西。

编辑:您还可以传递一个委托来调用,以便为您进行更改,或者您可以传递对该项目的引用(同样,不推荐)。但是,请确保您在同一个线程中执行此操作。

编辑2:在此链接的基础上,您的界面可能如下所示:

interface IYourForm
{
    void ShowBalloonTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon);
}

然后您的表单将实现界面:

class YourForm : Form, IYourForm

方法:

public void ShowBalloonTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon)
{
    TaskbarIcon.ShowBalloonTip(timeout, tipTitle, tipText, tipIcon);
}

然后,这会将您的DoSomething方法更改为:

private method DoSomething(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon)
{
    Main.ShowBalloonTip(timeout, tipTitle, tipText, tipIcon);
}

再次,确保这一切都在同一个线程。否则,需要以不同方式处理。