DateTimePicker.Text不靠谱
获取时:在DateTimePicker.ValueChanged事件中,获取到的Text有可能是string.Empty!!!,特别当ValueChanged事件是在构造函数或Load、Shown等启动事件中触发时,得到string.Empty的几率增大;
赋值时:有可能触发不了TextChanged事件(该事件默认不显示在设计器中,但的确是存在的);
可能的原因:先看Value属性的setter源码:

set
{
bool flag = !DateTime.Equals(this.Value, value);
if (!this.userHasSetValue || flag)
{
if ((value < this.MinDate) || (value > this.MaxDate))
{
throw new ArgumentOutOfRangeException("Value", SR.GetString("InvalidBoundArgument", new object[] { "Value", FormatDateTime(value), "'MinDate'", "'MaxDate'" }));
}
string text = this.Text;
this.value = value;//修改value
this.userHasSetValue = true; //判断是否拥有句柄
if (base.IsHandleCreated)
{
int wParam = 0;
NativeMethods.SYSTEMTIME lParam = DateTimeToSysTime(value);
//发送消息:有可能就是这厮负责改Text
UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1002, wParam, lParam);
}
if (flag)
{
this.OnValueChanged(EventArgs.Empty);//触发ValueChanged事件
}
if (!text.Equals(this.Text))
{
this.OnTextChanged(EventArgs.Empty);
}
}
}

当中没有直接对this.Text赋值,这应该是为了避免陷入死循环,因为Text改变也会触发Value改变,也可能正因为这样,MS采取了迂回的方式来处理Text属性——通过Windows消息机制,而该机制是依赖控件句柄的,换言之只有当控件拥有了句柄才能处理Text。对消息机制和控件句柄我不熟(玩Win32开发的童鞋们那就相当的熟了),我猜控件句柄的生成和分配由OS负责,分配时机也不一定,大概可能是控件显现了才会分配到。所以在构造函数或Load、Shown等启动事件中修改Value时,也许控件还未分配到句柄,所以Text未被处理,导致得不到正确结果~
上述均是猜的哦,有可能对有可能不对。
所以,无论如何,敬告大家,对于DateTimePicker控件,Value和ValueChanged才是你正确的选择,忘掉Text和TextChanged。
DateTimePicker.Text不靠谱的更多相关文章
- 注意:DateTimePicker.Text不靠谱
		
这鸟属性把我害苦过,特此敬告一下大家.具体表现在: 获取时:在DateTimePicker.ValueChanged事件中,获取到的Text有可能是string.Empty!!!,特别当ValueCh ...
 - 不靠谱的Paypal及海外网站
		
昨天因为报名参加某个比赛,需要用到Paypal付款,整整折腾了我一个小时.我先是使用自己的银行储蓄卡,到最后一步需要银行确认,提示我需要安装个插件才能输入密码.安装完插件后需要重启浏览器,整个流程又要 ...
 - UC何小鹏:移动互联网创业需警惕五大“不靠谱
		
http://tech.qq.com/a/20140121/012443.htm 腾讯科技 启言 1月21日报道 移动互联网创业很容易犯错误,一不小心就陷入“坑”中.UC也是如此.近日,UC创始人何小 ...
 - 参加Java培训到底靠不靠谱?
		
导读 科技越发展,社会越进步,人们越便利,便衍生出更多的人从事程序员这个高大上的职业,可哈尔滨Java培训学校这么多,到底靠不靠谱,会不会处处是陷阱,爱尚实训帮你擦亮眼 随着时代的发展,越来越多的人对 ...
 - mysql进阶(十)不靠谱的FLOAT数据类型
		
今天在设计数据表时,突然发现原来FLOAT原来是很不靠谱的,所以在这里建议大家换成DOUBLE类型, 原因是: 在mysql手册中讲到,在MySQL中的所有计算都是使用双精度完成的,使用float(单 ...
 - Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】
		
最近发现使用 -z 和 -n 来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ] ...
 - 出租WiFi到底靠不靠谱?
		
创业是一种心态,也是不断的探索,他融入我们的生活,从日常中积累,从小微处启航. 一.背景交代 最近在换工作,本周搬到新租的单身公寓,空间不大,倒是干净整洁.委托租房中介帮忙开通宽带,告知是电信网最低开 ...
 - SimpleDateFormat之后为何多了一年,难道Java API也这么不靠谱?
		
这一切的背后到底是机器故障,还是程序的bug? 难道Java API也不靠谱 朋友在我博客上发现一时间明显错误,操作时间怎么会是2016年?在同一个for循环输出到页面的时间,唯独这一个时间不对,整整 ...
 - DevOps|从特拉斯辞职风波到研发效能中的不靠谱人干的荒唐事
		
今天发生了一件大事特拉斯辞任英国首相,我想借着这件事情说下我看到的一件研发效能的荒唐事,这其中的关联也许就是「都用了不靠谱的人」. 两件事情 今儿一早就听到,2022年10月20日英国第78任首相伊丽 ...
 
随机推荐
- wget一个小技巧
			
今天在装一个东西的时候,在网上看到了这样的命令 wget http://xxxx.sh -o - | sh 的用法 不太明白-o -的用法于是乎man wget,看到了下面的一段话 -O fil ...
 - IOS开发中绘制地图线路
			
地图应用经常会涉及到线路的绘制问题,ios下可以使用MKMapView进行地图开发,使用 MKOverlayView进行线路的绘制. 使用MKMapView添加MKMap.framework 和Cor ...
 - Java JDK 8 安装和环境变量的配置(Linux and Windows)
			
Java JDK 8 的安装以及环境变量的配置(Linux and Windows) JDK(Java Development Kit)包含了Java语言的编译器,能够在这里下载: http://ww ...
 - 创建GitHub技术博客
			
创建GitHub技术博客全攻略 githubio技术博客网站生成 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...
 - iOS发展 - 使用您自己的自定义字体
			
一位同事问我最后一次,XXapp字体如何萌啊? 我也想提出萌哒哒的字体!然后,今天有这blog. 首先,我们正处于iOS发展,苹果给了我们很多的字体,当然,我就不一一列举在这里,英文,小汤表示看不懂啦 ...
 - web设计师和前端设计师的互动—前端工程师应该具备的三种思维
			
如果你是一个天才工程师(马上可以离开),可以独立完成一个很多事情,你可以是一个怪咖,因为我相信没有一个人不会不佩服你.但现实归现实,多数人都不是天才,而我们在职场上也不是单打独斗,我们需要团队合作,需 ...
 - Mac下一个/usr/include失踪
			
Mac升级到Yosemite后,突然发现vim的YouCompleteMe代码提示所以空头支票成员,排查了一下,原本/usr/include目录中缺少.所有的C/C++头文件不见了. .. 第一次发现 ...
 - SqlDataReader的关闭问题
			
原文:SqlDataReader的关闭问题 昨天一个朋友使用Repeater绑定数据源时,老是出现"阅读器关闭时尝试调用 FieldCount 无效."错误. 我看了他的代码,使用 ...
 - Canvas入门(3):图像处理和渲染文本
			
资源:http://www.ido321.com/997.html 一.图像处理(非特别说明,全部结果均来自最新版Google) 在HTML 5中,不仅能够使用Canvas API绘制图形,也能够用于 ...
 - JavaScript 多级联动浮动(下拉)菜单 (第二版)
			
JavaScript 多级联动浮动(下拉)菜单 (第二版) 上一个版本(第一版请看这里)基本实现了多级联动和浮动菜单的功能,但效果不是太好,使用麻烦还有些bug,实用性不高.这次除了修改已发现的问 ...