bj_zm 发表于 2015-2-9 10:13:00

C1DateTimePicker 的自动补充文本

C1DateTimePicker
比如我点击时间部分,然后输入15.离开焦点时能自动补充为15:00:00
而现在是离开焦点,自动还原成原来的时间了。最终使用者对于这样写还是感觉麻烦,有没有什么解决办法?





Alice 发表于 2015-2-9 14:59:00

回复 1楼bj_zm的帖子

C1DateTimePicker的时间显示默认情况下是12小时的,下面3点是"3:00:00",而不是"15:00:00“。
当你输入15的时候是不合法的,因此会自动跳转到合法的原来的值。
如果你需要输入15:00代替3点,需要将时间变成24小时格式的。

目前有两种方式:
1.设置TimeFormat为Custom,然后设置CustomFormat属性为你需求的,比如"HH:mm:ss".
但是CustomFormat属性在C1DateTimePicker控件里是隐藏的,所以你需要在C1DateTimePicker里search倒C1TimeEditor,然后设置它的CustomFormat属性。
2.在应用程序的任何开始的地方,改变当前culture的时间格式,比如:
DateTimeFormatInfo dtfi = GetCurrentDateTimeFormat();
dtfi.ShortTimePattern = "your value"; // or the same for the LongTimePattern

bj_zm 发表于 2015-2-9 20:44:00

回复 2楼Alice的帖子

那只是举个例子,写3也是不行。必须写3:00:00才认,否则会恢复原来的时间。

Alice 发表于 2015-2-10 09:19:00

回复 3楼bj_zm的帖子

没有重现该问题。
测试步骤:
1.新建一个wpf工程。
2.从工具箱拖一个C1DateTimePicker到页面。
3.运行该工程。
4.点击C1DateTimePicker的Time区域,进入编辑状态。将Focus移到12的位置。
5.删除掉12,并且输入3/或1/或10.
6.鼠标点到其他地方离开Focus。
Time区域的文字会自动从12:00:00 AM变成3:00:00 AM。

测试版本2014V3. 控件C1DateTimePicker。

请检查你的代码逻辑是否有问题,从而影响了正确性。

bj_zm 发表于 2015-2-10 09:24:00

回复 4楼Alice的帖子

哦,你理解有误了。 我知道移到小时部分改没问题
我说的是默认全选中的,直接改。不是选到某一部分。

Alice 发表于 2015-2-10 14:31:00

回复 5楼bj_zm的帖子

你的意思是,全选Time区域的时间,然后键盘敲入一个数字,然后离开Focus?

这个时候是会自动的转换成原本正确的时间,这是C1DateTimeEditor的设计。因为它接受的是一个时间类型的,而你输入的是数字类型的。因此类型是不正确的。比如输入5,控件不能自动猜测出客户需要的是5:00:00,还是00:05:00或是00:00:05。因此强制转换是不合理的。

实际上C1DateTimePicker是由C1DatePicker和C1TimeEditor两部分组成。你可以获取到C1TimeEditor,使用它的TextValidationError事件。当数据出现异常触发此事件的时候,尝试将值转成TimeSpan的类型。
void timeEditor_TextValidationError(object sender, TextValidationErrorEventArgs e)
      {
            timeEditor.Value = new TimeSpan(Int32.Parse(e.Text), 0, 0);
      }

bj_zm 发表于 2015-2-10 14:49:00

回复 6楼Alice的帖子

就这个意思,估计差不多,我试试。谢谢,试了好几个方法就没试这个验证错误事件。

bj_zm 发表于 2015-2-10 15:12:00

回复 6楼Alice的帖子

可以了,感谢。

Alice 发表于 2015-2-10 15:24:00

回复 8楼bj_zm的帖子

谢谢你的反馈。

此问题结束,如果有新问题请开帖。
页: [1]
查看完整版本: C1DateTimePicker 的自动补充文本