silverlight页,按回车键自动跳转
来源:互联网 发布:淘宝怎么给微信发链接 编辑:程序博客网 时间:2024/05/23 13:03
#region 自动跳转
void InitializeControls()
{
//把界面上的TextBox,RadioButton,ComboBox,CheckBox都加入列表
//注:一般业务录入界面上只有这4种类型的输入控件,如果还有其实类型,可自行扩展
allInputControls.AddRange(FindChildren<TextBox>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<RadioButton>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<ComboBox>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<CheckBox>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<Button>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<PasswordBox>(LayoutRoot).Cast<Control>());
//按TabIndex排序
allInputControls = allInputControls.OrderBy(c => c.TabIndex).ToList();
foreach (Control c in allInputControls)
{
c.KeyDown += EnterKeyDownToTab;
if (c is ComboBox)
{
//ComboBox要特殊处理
(c as ComboBox).DropDownClosed += DropDownClosedToNext;
}
}
}
void EnterKeyDownToTab(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
GoToNextControl(sender);
}
}
void GoToNextControl(object sender)
{
var self = sender as Control;
if (self == null)
{
return;
}
var selfTabIndex = self.TabIndex;
//找出下一个控件
var nextControl = allInputControls.FirstOrDefault(c => c.TabIndex > selfTabIndex);
if (nextControl != null)
{
nextControl.Focus();
}
else
{
allInputControls[0].Focus();//最后一个控件时,再跳到第一个(可选处理)
}
}
/// <summary>
/// 查找所有子元素(递归)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent"></param>
/// <returns></returns>
public static IEnumerable<T> FindChildren<T>(DependencyObject parent) where T : class
{
int count = VisualTreeHelper.GetChildrenCount(parent);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
var t = child as T;
if (t != null)
yield return t;
IEnumerable<T> children = FindChildren<T>(child);
foreach (T item in children)
yield return item;
}
}
}
private void DropDownClosedToNext(object sender, EventArgs e)
{
GoToNextControl(sender);
}
#endregion
void InitializeControls()
{
//把界面上的TextBox,RadioButton,ComboBox,CheckBox都加入列表
//注:一般业务录入界面上只有这4种类型的输入控件,如果还有其实类型,可自行扩展
allInputControls.AddRange(FindChildren<TextBox>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<RadioButton>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<ComboBox>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<CheckBox>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<Button>(LayoutRoot).Cast<Control>());
allInputControls.AddRange(FindChildren<PasswordBox>(LayoutRoot).Cast<Control>());
//按TabIndex排序
allInputControls = allInputControls.OrderBy(c => c.TabIndex).ToList();
foreach (Control c in allInputControls)
{
c.KeyDown += EnterKeyDownToTab;
if (c is ComboBox)
{
//ComboBox要特殊处理
(c as ComboBox).DropDownClosed += DropDownClosedToNext;
}
}
}
void EnterKeyDownToTab(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
GoToNextControl(sender);
}
}
void GoToNextControl(object sender)
{
var self = sender as Control;
if (self == null)
{
return;
}
var selfTabIndex = self.TabIndex;
//找出下一个控件
var nextControl = allInputControls.FirstOrDefault(c => c.TabIndex > selfTabIndex);
if (nextControl != null)
{
nextControl.Focus();
}
else
{
allInputControls[0].Focus();//最后一个控件时,再跳到第一个(可选处理)
}
}
/// <summary>
/// 查找所有子元素(递归)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent"></param>
/// <returns></returns>
public static IEnumerable<T> FindChildren<T>(DependencyObject parent) where T : class
{
int count = VisualTreeHelper.GetChildrenCount(parent);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
var t = child as T;
if (t != null)
yield return t;
IEnumerable<T> children = FindChildren<T>(child);
foreach (T item in children)
yield return item;
}
}
}
private void DropDownClosedToNext(object sender, EventArgs e)
{
GoToNextControl(sender);
}
#endregion
- silverlight页,按回车键自动跳转
- 按回车键自动跳转到下一个文本框
- 通过回车键使得光标自动跳转
- 按回车键 自动登录
- 按回车键后 自动登录
- .实现文本框焦点自动跳转及通过回车键提交表单
- 按回车键自动跳到下一个控件
- form表单按回车键自动提交表单
- Silverlight - 回车键触发默认按钮
- js实现只能输入数字,按回车键实现叶面跳转
- dataGridView中 按回车键跳转到 指定单元格的方法!
- 如何实现文本框焦点自动跳转及通过回车键提交表单
- 如何实现文本框焦点自动跳转及通过回车键提交表单[引用]
- 如何实现文本框焦点自动跳转及通过回车键提交表单
- asp.net实现文本框焦点自动跳转及通过回车键提交表单
- 表单回车键自动提交
- 如按回车键自动进入下一条记录
- 当按回车键,焦点自动跳到下一个文本框代码
- sql 偱环插入数据
- 我自由职业头一年总结
- JNI基础
- svn下常用目录介绍
- bloom filter详细讲解以及代码分析
- silverlight页,按回车键自动跳转
- 自私的基因
- GRUB损坏后,如何修复windows启动mbr或者其他
- HubbleDotNet开源全文搜索数据库项目--技术详解
- 服务器 缓存机制
- Apatana升级至3.4以后JS语法着色失败
- The connection to adb is down, and a severe error has occured.
- 2012电子信息 第九次实验任务
- Android的Audio框架分析