【问题标题】:How to access the notifyIcon from another class如何从另一个类访问 notifyIcon
【发布时间】:2012-05-06 06:48:01
【问题描述】:

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

现在这是有道理的,因为它不在范围内,但我仍将如何访问它?我需要一个接口吗?根据https://stackoverflow.com/a/5647064/659731,我确实需要一个(但它是一个文本框),您可以传递一个字符串,而使用 baloontip 我需要传递更多参数:ShowBalloonTip(2000, "Nu:", result[0] + " - " + result[1], ToolTipIcon.Info);

它是用public System.Windows.Forms.NotifyIcon TaskbarIcon;声明的

【问题讨论】:

  • TaskbarIcon 是如何/在哪里声明的?
  • 你能把你Main表单的相关成员变量贴出来吗?

标签: c# winforms


【解决方案1】:

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

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

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

然后你会从你的班级中调用该项目:

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

但是,正如您 mentioned,最好在您的类和实际对象之间放置一些东西。

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

Edit2:在链接的基础上,您的界面可能如下所示:

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

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

【讨论】:

  • 你能告诉我如何创建这样的接口来处理这些多个参数吗?
  • 谢谢,但是它给我抛出了错误Method must have a return type for
  • 对不起,我再次编辑了它,但我想在你开始之前没有。我错过了接口方法上的 void
  • 干杯,这部分现在可以工作了。但是我得到了最后一个错误,请查看pastebin.com/t5TDQ54R
  • 你有没有在构造函数中添加属性并赋值给它?请参阅我的答案中的第一个代码块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2012-01-04
  • 1970-01-01
  • 2015-10-20
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多