2012-01-08 13 views
0

私のnotifyIconが使用しているアイコンをテストする際に問題があります。notifyIconが使用しているアイコンをテストするにはどうすればよいですか?

私は自分のプログラムに対してインスタンス化されたnotifyiconを持っています。プログラムが実行されると、自分のコード内にアイコンが割り当てられます。

public Form1() 
    {    
     InitializeComponent(); 
     notifyIcon1.Icon = Properties.Resources.LogoIcon; 
    } 

私は2つのボタン、1つはタイマーを開始し、もう1つはタイマーを停止します。タイマーイベントは、現在どのアイコンが使用されているかをチェックし、それを他のオプションに切り替えることを想定していますが、テストでは機能しません。

Timer miniClock = new Timer(); 

    private void btnStartTimer_Click(object sender, EventArgs e) 
    {   
     miniClock.Interval = 1000; 
     miniClock.Tick += new EventHandler(MiniClockEventProcessor); 
     miniClock.Start(); 
    } 

    private void MiniClockEventProcessor(Object myObject, EventArgs myEventArgs) 
    { 
     if (notifyIcon1.Icon == Properties.Resources.AlertIcon) 
     { 
      notifyIcon1.Icon = Properties.Resources.LogoIcon; 
     } 
     else 
      notifyIcon1.Icon = Properties.Resources.AlertIcon; 

    } 

    private void btnStopTimer_Click(object sender, EventArgs e) 
    { 
     miniClock.Stop(); 
     btnTest.Enabled = true; 
    } 

イライラ部分は、私は、タイマーを起動したとき、それはアイコンを変更しますが、私のテストが失敗し、それがもし失敗したことを除いて、それを何の基準をありませんので、それが唯一のelseステートメントのアイコンを切り替えますですステートメント?現在どのアイコンが使用されているのかをテストし、タイマーイベントコールのアイコンに切り替えるにはどうすればよいですか?

答えて

1

私はそれ自体Iconにし、いくつかstateに中継することが容易だと思う:

ソリューションは、効率のために関係なく、やるべきことどの、それをキャッシュすることです。 私は何かのイベントに基づいて、またはいくつかの変更された状態の通知に基づいてAlertIconまたはLogonIconを設定すると思います。何が起こるかを示す単純なboolの状態変数を持つ方が良いでしょう。 recived 警告プロパティIsAlertState = true

private void MiniClockEventProcessor(Object myObject, EventArgs myEventArgs) 
{ 
    if (!IsAlertState) 
    { 
     notifyIcon1.Icon = Properties.Resources.LogoIcon; 
    } 
    else 
     notifyIcon1.Icon = Properties.Resources.AlertIcon; 

} 

private bool IsAlertState {get;set} 

例えば

、私が何を言っているか説明するためには、擬似コードです。

このようなものです。

+0

素晴らしい提案です。私はクロックイベントの各実行で変更されたブール値に基づいてテストを実装し、それは素晴らしい動作します。ありがとう! –

+0

@FuzzEvans:とにかくアイコンをキャッシュする必要があることに注意してください。それ以外の場合は、毎回ロードします。 – Ryan

+0

@minitech、ありがとう、私はそうするでしょう。 –

3

オブジェクトを直接Properties.Resourcesから直接アクセスするたびに、実際に新しいオブジェクトが読み取られ、新しいオブジェクトが作成されるためです。 ==は参照によってテストされ、参照は等しくないので、テストは毎回失敗します。

private static readonly Icon LogoIcon = Properties.Resources.LogoIcon; 
private static readonly Icon AlertIcon = Properties.Resources.AlertIcon; 

public Form1() 
{    
    InitializeComponent(); 
    notifyIcon1.Icon = LogoIcon; 
} 

Timer miniClock = new Timer(); 

private void btnStartTimer_Click(object sender, EventArgs e) 
{   
    miniClock.Interval = 1000; 
    miniClock.Tick += new EventHandler(MiniClockEventProcessor); 
    miniClock.Start(); 
} 

private void MiniClockEventProcessor(Object myObject, EventArgs myEventArgs) 
{ 
    if (notifyIcon1.Icon == AlertIcon) 
    { 
     notifyIcon1.Icon = LogoIcon; 
    } 
    else 
     notifyIcon1.Icon = AlertIcon; 

} 

private void btnStopTimer_Click(object sender, EventArgs e) 
{ 
    miniClock.Stop(); 
    btnTest.Enabled = true; 
} 
+0

私はあなたの言うことを理解していますが、上記を実装しようとするとエラーが発生します。 Properties.Resources.LogoIcon 'は'プロパティ 'ですが、'タイプ 'のように使用されます。 –

+0

@FuzzEvans:申し訳ありません、コードを修正しました。私はタイプを定義するのを忘れました。 – Ryan

+0

私は実際のアイコンに対してテストできない理由について、あなたの情報を感謝します。 –

関連する問題