找回密码
 立即注册

QQ登录

只需一步,快速开始

x_g
银牌会员   /  发表于:2015-9-18 18:17  /   查看:12286  /  回复:4
使用InputMan的GcDate,给每个日期控件添加了GcDateValidator,使得当日期填的不完整的时候,会自动填充数据,但是只有在按button把光标移开后才会有效果,如果是按键盘上的快捷键,则不能自动填充,请问有什么解决方法吗

4 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-9-21 18:23:00
沙发
回复 1楼x_g的帖子

谢谢反馈。
你的问题我们收到了。
校验后给你反馈,很抱歉给你带来的不便。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Leo
超级版主   /  发表于:2015-9-21 18:25:00
板凳
通过反射触发一下GcDate的Validating事件应该就可以,参见这段代码
  1.     public partial class Form1 : Form
  2.     {
  3.         public Form1()
  4.         {
  5.             InitializeComponent();
  6.             var shortcuts = this.gcShortcut1.GetShortcuts(gcDate1);
  7.             shortcuts.Add(Keys.Enter, new MethodInvoker(ValidateGcDate));
  8.         }
  9.         public void ValidateGcDate()
  10.         {
  11.             var focusedControl = GetFocusedControl(this) as GrapeCity.Win.Editors.GcDate;
  12.             if (focusedControl == null)
  13.             {
  14.                 return;
  15.             }
  16.             MethodInfo mi = focusedControl.GetType().GetMethod("PerformControlValidation", BindingFlags.Instance | BindingFlags.NonPublic);
  17.             if (mi != null)
  18.             {
  19.                 mi.Invoke(focusedControl, new object[] { true });
  20.             }
  21.         }
  22.         private static Control GetFocusedControl(Control root)
  23.         {
  24.             if (!root.ContainsFocus)
  25.             {
  26.                 return null;
  27.             }
  28.             if (root.Focused)
  29.             {
  30.                 return root;
  31.             }
  32.             foreach (var child in root.Controls)
  33.             {
  34.                 var focusedControl = GetFocusedControl(child as Control);
  35.                 if (focusedControl != null)
  36.                 {
  37.                     return focusedControl;
  38.                 }
  39.             }
  40.             return null;
  41.         }
  42.     }
复制代码

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

回复 使用道具 举报
x_g
银牌会员   /  发表于:2015-9-23 10:16:00
地板
回复 3楼Leo的帖子

尝试了您的方法,但是有一点不太理解。
在窗体上增加了GetShortcuts后,GcDateValidator控件好像就无法捕捉到KeyDown事件了,
回复 使用道具 举报
Leo
超级版主   /  发表于:2015-9-23 15:49:00
5#
回复 4楼x_g的帖子

那是因为,GcShortcut有这么个机制,默认情况下,对于自己处理过的快捷键,不再向Control派发,当然还有一个黑科技,以下代码可以无视这个行为:
  1. gcShortcut1.BlockKeyMessage = false;
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部