0

メインフォームにがありnotifyIcon、別のクラスからバルーンチップを設定したいと考えています。次のエラーが表示されます。The name 'TaskbarIcon' does not exist in the current context

これは範囲内にないため、これは理にかなっていますが、どうすればこれにアクセスできますか? インターフェイスは必要ですか?https://stackoverflow.com/a/5647064/659731によると、1つ必要です(ただし、テキストボックスです)。文字列を渡すことができますが、バルーンチップではより多くの引数を渡す必要があります:ShowBalloonTip(2000, "Nu:", result[0] + " - " + result[1], ToolTipIcon.Info);

で宣言されていますpublic System.Windows.Forms.NotifyIcon TaskbarIcon;

4

1 に答える 1

1

クラスに渡す必要があるフォームへの参照Mainが必要になります(おそらくコンストラクターで):

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

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

次に、クラスからアイテムを呼び出します。

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

ただし、おっしゃったように、クラスと実際のオブジェクトの間に何かを配置することをお勧めします。

編集: デリゲートを呼び出して変更を行うか、アイテムへの参照を渡すこともできます (これもお勧めしません)。ただし、これをすべて同じスレッドで実行していることを確認してください。

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

繰り返しますが、これがすべて同じスレッド上にあることを確認してください。それ以外の場合は、別の方法で処理する必要があります。

于 2012-04-25T15:05:29.337 に答える