早就有想法要写一个日报助手的程序,为了减轻我对每项工作的估计时间,减少日报中的错误数据,减少我对日报的厌恶。
周四的时候终于把1.0版给写出来了,功能是有了,画面巨简单,实现也就100来行代码,周五用了用,感觉不错,至少写日报的时间没有那么久了。
今天又花了些时间,把程序完善了一下,我想要的功能至少都有了,写的过程中,有下面几个以前没碰到的问题,比较弱,让我不禁感叹,自己原来还是一个菜鸟
一.最小化到托盘
1.拖一个NotifyIcon控件到Form上,将NotifyIcon的Visible设为false,Form的KeyPreview属性设为true
2.在Form的SizeChange事件中判断是否是最小化操作,将NotifyIcon的Visible属性设为true,任务栏显示的属性设为False
- if (WindowState == FormWindowState.Minimized)
- {
- ShowInTaskbar = false;
- notifyIcon1.Visible = true;
- }
3.在NotifyIcon的MouseClick事件中,将任务栏显示的属性设为True,NotifyIcon的Visible设为False,同时将画面恢复
- if (WindowState == FormWindowState.Minimized)
- {
- ShowInTaskbar = true;
- WindowState = FormWindowState.Normal;
- notifyIcon1.Visible = false;
- }
二.ListBox每行的背景色设置
这个本身ListBox没有提供属性直接修改每一行的背景色,所以,需要把ListBox重新绘制一遍
1.要让ListBox响应重绘,需要把ListBox.DrawMode设为非Normal,防止绘制到ListBox之外,把ScrollAlwaysVisible设为true
2.在ListBox的DrawItem事件中绘制所有行,我是判断了一下奇偶行,分别设不同的颜色,用到了Brush(刷子)
- if (lbTasks.Items.Count == 0)
- {
- return;
- }
- if (e.Index != nRunTaskNo)
- {
- int r;
- Math.DivRem(e.Index, 2, out r);
- Console.WriteLine(e.Index);
- Brush br = r == 0 ? Brushes.Gainsboro : Brushes.GhostWhite;
- Brush b = Brushes.Black;
- e.Graphics.FillRectangle(br, e.Bounds);
- if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
- {
- e.Graphics.FillRectangle(Brushes.LightSkyBlue, e.Bounds);
- }
- e.Graphics.DrawString(lbTasks.Items[e.Index].ToString(), lbTasks.Font, b, e.Bounds);
- }
- else
- {
- e.Graphics.FillRectangle(Brushes.MediumSpringGreen, e.Bounds);
- e.Graphics.DrawString(lbTasks.Items[e.Index].ToString(), lbTasks.Font, Brushes.Black, e.Bounds);
- }
这里主要用到了FillRectangle和DrawString,前者是绘制背景色,后者是把被覆盖的内容画上去,而如果是焦点行的话,应该单独判断。如果是Task运行,用其他颜色一直显示。这个方法会在刷新画面时激发,每一行都会调用。
2.在需要刷新画面的地方,添加ListBox.Refresh();
三.判断Ctrl组合键的按下
这个很久之前还写过,今天不知道为什么就是没想出来,还是网上搜了一下才明白。
1.在KeyDown事件中判断,判断的要点在于e.Control,e.Modifiers,e.KeyCode,如果是在KeyUp事件中,KeyCode不知为何就是数字,不是Key.S之类的。所以还是要写到KeyDown里。
- if (e.Control && e.KeyCode == Keys.S)
- {
- Start();
- }
- else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Q)
- {
- Pause();
- }
付个链接,这就是成果:http://www.91files.com/?DY1AYHZHXDWTSRZDNWA9