博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CnClock桌面时钟-Winform小程序开发
阅读量:6810 次
发布时间:2019-06-26

本文共 3193 字,大约阅读时间需要 10 分钟。

过年回家也上不了网,前两天闲得无聊就自己研究了一个小程序。先看一下程序的界面:

界面一:

界面二:

 

这个小程序大概用了一天多的时间编写出来,功能比较简单,该程序具有的功能:

1.可以显示日期,当前时间,星期,农历。

2.程序可以吸附在桌面上,实现嵌入桌面的效果。

3.可以设置程序为开机自启动。

 

下面贴出部分主要代码:

 
//
设置吸附桌面功能 
 
private 
void 吸附桌面ToolStripMenuItem_CheckStateChanged(
object sender, EventArgs e) 
 ...{ 
 
//
默认为勾选状态(吸附桌面),点击后即触发该事件,“吸附桌面”项勾掉了,则变量ischecked为!ischecked(false), 
 
//
则可以移动窗体。再次点击该菜单项,ischecked为!ischecked(true),则不能移动窗体。 
 
//
checkstate发生变化 
 ischecked = !ischecked; 
 
if (ischecked == 
true
 ...{ 
 勾选但不移动的处理
#region 勾选但不移动的处理(如果用户勾选了该项,但是并没有移动程序的位置,则进行该项判断)
 
//
2012年1月31日0:27:44 解决思路: 
 
//
先判断ini文件是否存在,如果是第一次启动程序或ini文件丢失,则无ini文件, 
 
//
则没有上次保存的ini配置信息,不进行读取操作,否则 
 
//
先从ini文件中读取上次设定的x,y的坐标值,作为old_x,old_y。再将新的坐标值与旧的 
 
//
坐标值进行比较,如果窗体移动了,则比较后不同,进行写入ini操作,否则不写入 
 
 
if (File.Exists(pathbase + 
"
CnClock.ini
")) 
 ...{ 
 
try 
 ...{ 
 StreamReader sr = 
new StreamReader(pathbase + 
"
CnClock.ini
", Encoding.GetEncoding(
"
gb2312
")); 
 
if (sr.Peek() >= 
0
 ...{ 
 old_x = Convert.ToInt32(sr.ReadLine()); 
 old_y = Convert.ToInt32(sr.ReadLine()); 
 } 
 sr.Close(); 
 } 
 
catch (Exception ex) 
 ...{ 
 MessageBox.Show(ex.Message.ToString()); 
 } 
 } 
 
#endregion 
 
//
2012年1月30日22:34:43,又想到一个新问题:如果用户勾选了“吸附桌面”项后,没有移动该窗体的位置, 
 
//
这种情况下是否要判断一下新位置与原位置是否相同??? 经考虑,需设定! 
 
//
2012年1月31日0:21:04 设置完成,代码见 #勾选但不移动的处理 部分 
 
 
//
什么时候才会执行下面这句代码“yidong = false;” 呢? 
 
//
分析:在form_load时不会执行,只有当用户移动窗体后,再选中"吸附桌面"项后才会执行 
 
//
这句代码,所以这里才是控制什么时候将新的位置坐标写入ini文件的地方,在这句下面写相应代码 
 yidong = 
false
 
 
 
//
如果用户勾掉了“吸附桌面”选项,则窗体可以移动,待用户确定新位置后, 
 
//
如果用户不勾上“吸附桌面”菜单项,则不记录新位置坐标,否则将新位置的坐标写入ini配置文件中。 
 
try 
 ...{ 
 
//
获取窗体移动后的坐标(_x,_y) 
 _x = 
this.Location.X; 
 _y = 
this.Location.Y; 
 
//
勾选但不移动的处理(部分代码) 
 xin_x = 
this.Location.X; 
 xin_y = 
this.Location.Y; 
 
 
//
相或,一真为真。即如果x不同或y不同或两个都不同,则说明窗体位置发生变化了 
 
//
须执行写入操作 
 
//
勾选但不移动的处理(部分代码) 
 
if (!(xin_x == old_x) || !(xin_y == old_y)) 
 ...{ 
 StreamWriter sw = 
new StreamWriter(pathbase + 
"
CnClock.ini
"
false, Encoding.GetEncoding(
"
gb2312
")); 
 sw.Flush(); 
 sw.WriteLine(_x); 
 sw.WriteLine(_y); 
 sw.Close(); 
 
//
新位置确认后给予提示 
 
this.notifyIcon1.ShowBalloonTip(
5
"
CnClock提示
"
"
新位置已设定!
", ToolTipIcon.Info); 
 } 
 } 
 
catch (Exception ex) 
 ...{ 
 MessageBox.Show(ex.Message.ToString()); 
 } 
 } 
 
else 
 ...{ 
 yidong = 
true
 } 
 }
 
 
 
 
设置开机自启动功能:
 
 
  
//
设置开机启动功能 
 
private 
void 开机启动ToolStripMenuItem_CheckStateChanged(
object sender, EventArgs e) 
 ...{ 
 
/*
设计思路: 2012年1月31日16:00:47完成 
 * 默认开机启动,则在form_load中先执行一下设置autorun方法。 
 * 用户勾掉“开机启动”项后,则取消autorun,用户勾选“开机启动”项后,则设置autorun。 
 
*/ 
 
//
初始为开机启动,则isautorun初始为true,当用户点击该项后,isautorun为false,不开机启动。 
 isautorun = !isautorun; 
 
if (isautorun == 
true
 ...{ 
 
//
isautorun为true,开机启动 
 auToRun.SetAutoRun(Application.ExecutablePath, 
true); 
 
//
设置为开机启动后给予提示 
 
this.notifyIcon1.ShowBalloonTip(
5
"
CnClock提示
"
"
开机启动已设定!
", ToolTipIcon.Info); 
 } 
 
else 
 ...{ 
 
//
isautorun为false,开机不启动 
 auToRun.SetAutoRun(Application.ExecutablePath, 
false); 
 
//
设置为开机不启动后给予提示 
 
this.notifyIcon1.ShowBalloonTip(
5
"
CnClock提示
"
"
已关闭开机启动!
", ToolTipIcon.Info); 
 } 
 }
 
 
 
 
程序下载地址:CnClock1.0版:
            CnClock2.0版:
            如果以上页面无法下载可到下面页面下载:
 
 
说明:两个版本的区别是1.0版是方形显示的,2.0版是条形显示的(见文首图片)。
 
该程序需要.net Framework2.0或以上版本支持。
 
目前发现的一个小问题:

在程序选择是否支持开机启动时,要操作注册表。如果用户电脑上装有360安全卫士或QQ电脑管家等管理软件,会弹出提示信息。如果用户选择了不允许操作注册表,则程序弹出异常提示,注册表信息不会写入,但写入正确的气泡提示信息还会弹出来。这个地方还需要修改一下。

 
本人还是新手,如果代码有编写的不完善的地方还请大家多多指教。
 

 

本文转自 酷小孩 博客园博客,原文链接: http://www.cnblogs.com/babycool/archive/2012/02/02/2335655.html ,如需转载请自行联系原作者

你可能感兴趣的文章
如何得到当前程序执行的堆栈
查看>>
RedHat 7配置KVM和桥接
查看>>
算法设计与分析复习——第四章:贪心算法
查看>>
OpenStack HA集群1-Galera Cluster for Mysql
查看>>
ssh 遍历IPS 进行连接
查看>>
Linux网卡名改eth0方法
查看>>
python 实现斐波那契数列,动态删除历史数据demo,很久以前写的,分享给大家...
查看>>
iftop网卡流量监控软件
查看>>
linux 文件查找
查看>>
eclipse使用hadoop插件出现java.lang.OutOfMemoryError: Java heap space
查看>>
Unicode Tips
查看>>
jvm学习--类加载器
查看>>
enlightenment提权的工具
查看>>
指针的意义和linux的内存回收艺术
查看>>
操作系统就是虚拟机--主内又主外
查看>>
Centos网络管理(五)-Bonding、网络组和网桥
查看>>
PyCharm----中文显示乱码的解决方法总结
查看>>
crontab使用环境变量
查看>>
“独立博客”为什么独立?
查看>>
Uber花了21亿元入驻上海自贸区 不叫优步叫雾博
查看>>