[英]How can I make Visual Studio use my updated icon for my NotifyIcon?
[英]How can I test which icon my notifyIcon is using?
我在测试我的notifyIcon使用哪个图标时遇到问题。
我为我的程序实例化了一个notifyicon。 程序运行时,我在代码中为其分配了一个图标。
public Form1()
{
InitializeComponent();
notifyIcon1.Icon = Properties.Resources.LogoIcon;
}
我有2个按钮,一个按钮启动我的计时器,另一个按钮停止我的计时器。 计时器事件用于检查当前正在使用哪个图标,并将其切换到其他选项,但是使用我的测试无法正常工作。
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语句中的图标,因为没有标准,除非它使if语句失败? 如何测试当前正在使用的图标,然后在计时器事件调用中将其切换为对应的图标?
原因是每次您直接从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;
}
我认为,将某些state
传递给Icon
更容易。 我想您可以根据某个事件或某些更改的状态通知来设置AlertIcon
或LogonIcon
。 最好在某个简单的bool
变量的某个地方指明发生了什么。
例如,要解释我在说什么,是一个伪代码 :
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}
收到警报时 ,属性IsAlertState = true
。
这样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.