最近正在开发一个移动数据采集系统,其中涉及到了数据的录入功能,先开始直接调用的是系统自带的拼音键盘,如下图所示。
在实际的试运行过程中,用户觉得单纯录入数字,用这个键盘太小,而且容易输错数据,于是本着客户就是上帝的精神,自己写了个数据键盘,效果图如下。
这个键盘实现起来其实很简单,就是上学时很多人都做过的winform计算器的阉割版,现在为了写这篇博客,我也就羞射的把它拿出来了。
这篇文章主要介绍的不是数字键盘怎么实现,而是在WinCE中如何调用此键盘,这就要用到委托和事件了。
当textbox获得焦点,也就是触发GotFocus事件后。
private int keydownCount = 0;//记录获得焦点的次数 private void UCtxb_GotFocus(object sender, EventArgs e) { keydownCount++; if (keydownCount % 2 == 1)//当为第一次获取焦点时 { Keybord kb = new Keybord(this.UClbl.Text); kb.changed += new Keybord.KeyboardHandle(kb_changed); kb.ShowDialog(); } else { this.btnPic.Focus();//由于使用委托和事件,当从数字键盘赋值到textbox中时,textbox再次获得了焦点 //会再一次触发GotFocus事件,所以赋值完成后需要将焦点转移 } }
//在数字键盘中,定义委托事件。 public delegate void KeyboardHandle(string s); public event KeyboardHandle changed; //实现数据的同步 private void txtNum_TextChanged(object sender, EventArgs e) { changed(txtNum.Text); } private void btnEnter_Click(object sender, EventArgs e) { this.Close(); }
如果对委托和事件不太熟悉,可以看下此博文