GcDateValidator自动填充日期
使用InputMan的GcDate,给每个日期控件添加了GcDateValidator,使得当日期填的不完整的时候,会自动填充数据,但是只有在按button把光标移开后才会有效果,如果是按键盘上的快捷键,则不能自动填充,请问有什么解决方法吗 回复 1楼x_g的帖子谢谢反馈。
你的问题我们收到了。
校验后给你反馈,很抱歉给你带来的不便。 通过反射触发一下GcDate的Validating事件应该就可以,参见这段代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var shortcuts = this.gcShortcut1.GetShortcuts(gcDate1);
shortcuts.Add(Keys.Enter, new MethodInvoker(ValidateGcDate));
}
public void ValidateGcDate()
{
var focusedControl = GetFocusedControl(this) as GrapeCity.Win.Editors.GcDate;
if (focusedControl == null)
{
return;
}
MethodInfo mi = focusedControl.GetType().GetMethod("PerformControlValidation", BindingFlags.Instance | BindingFlags.NonPublic);
if (mi != null)
{
mi.Invoke(focusedControl, new object[] { true });
}
}
private static Control GetFocusedControl(Control root)
{
if (!root.ContainsFocus)
{
return null;
}
if (root.Focused)
{
return root;
}
foreach (var child in root.Controls)
{
var focusedControl = GetFocusedControl(child as Control);
if (focusedControl != null)
{
return focusedControl;
}
}
return null;
}
} 回复 3楼Leo的帖子
尝试了您的方法,但是有一点不太理解。
在窗体上增加了GetShortcuts后,GcDateValidator控件好像就无法捕捉到KeyDown事件了, 回复 4楼x_g的帖子
那是因为,GcShortcut有这么个机制,默认情况下,对于自己处理过的快捷键,不再向Control派发,当然还有一个黑科技,以下代码可以无视这个行为:
gcShortcut1.BlockKeyMessage = false;
页:
[1]