注意: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 = ;
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.Text不靠谱 获取时:在DateTimePicker.ValueChanged事件中,获取到的Text有可能是string.Empty!!!,特别当ValueChang ...
- 不靠谱的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任首相伊丽 ...
随机推荐
- java.sql.SQLException: No suitable driver 问题解决
最近在学习java,用到c3p0数据库连接池,遇到一个很奇怪的现象,用main方法测试是可以正常连接数据库的,但是使用jsp调用代码,就会报如下图的错误! 最下面的java.sql.SQLExcept ...
- 分享一些Hadoop环境搭建所用到的软件
本来想用土的掉渣的语言说说hadoop配置的,因为最近总有人问我,环境搭建老出莫名其妙的问题,可是写到一半,还是决定不写了,网上教程好多好多,而大家遇到问题有很多是软件版本不对应造成的,因此我就把大家 ...
- Struts2学习笔记 - HelloWorld总结
相信网上已经有很多关于struts2的HelloWorld可参考,我这里就不重复了,没个学struts2的人都会做过很多个HelloWorld,而我这里就总结一下一个简单的HelloWorld 我在一 ...
- KnockoutJS 3.X API 第四章 数据绑定(3) 控制流if绑定和ifnot绑定
if绑定目的 if绑定一般是格式是data-bind=if:attribute,if后所跟属性或表达式的值应为bool值(也可以是非bool值,当非空字符串时则为真),if绑定的作用与visible绑 ...
- Enterprise Solution 应用程序开发框架培训
一.系统架构 C# .NET 4.0 + Win Form + SQL Server 2005 二.五大核心模块 (菜单设计器Menu Designer,查询设计器Query Designer,报表设 ...
- 【SQL】姗姗来迟的SQL Server 安装图解
逆天今天被人拉过去装了个数据库...顺便就记录一下安装过程吧,一直想发一直没时间弄,今天就发下安装过程吧,2012和2008安装过程一样的 [注意安装细节] 安装过程中如果出现问题参 ...
- 深入理解PHP内核(十三)类的结构和实现
原文链接:http://www.orlion.ga/1117/ 先看一下类的结构: struct _zend_class_entry { char type; // 类型:ZEND_ ...
- QQ左侧滑动显示之按钮切换
上一篇为大家介绍了关于自定义属性设置方法,本篇我将为大家介绍一下如何通过按钮来控制Menu的显示和隐藏,为了达到这个效果我们需要在SlidingMenu中添加三个方法,用来达到实现上述效果的目的. 我 ...
- 设为首页 和 收藏本站js代码 兼容IE,chrome,ff
设为首页 和 收藏本站js代码 兼容IE,chrome,ff //设为首页 function SetHome(obj,url){ try{ obj.style.behavior='url(#defau ...
- springmvc学习笔记--mybatis--使用插件自动生成实体和mapper
由于表对象在开发过程中会增删字段,有时候需要重新生成实体和对应的mapper,这时候可以通过mybatis的插件的生成. 优点是快速简洁,缺点同样很明显:覆盖.因此,通常是在第一次搭建框架的时候使用, ...