.net cf在焦点上显示键盘的TextBox
我的UI上有一些文本框,我想在控件有焦点时显示移动键盘,然后消失。
注意:对于此特定程序,它是一个高屏幕,设备上没有物理键盘。
将InputPanel添加到表单,连接TextBox的GotFocus和LostFocus事件,并在事件处理程序中显示/隐藏输入面板:
private void TextBox_GotFocus(object sender, EventArgs e) { SetKeyboardVisible(true); } private void TextBox_LostFocus(object sender, EventArgs e) { SetKeyboardVisible(false); } protected void SetKeyboardVisible(bool isVisible) { inputPanel.Enabled = isVisible; }
更新
回应ctacke的完整性要求; 这是连接事件处理程序的示例代码。 通常我会使用设计器(选择文本框,显示属性网格,切换到事件列表并让环境设置GotFocus
和LostFocus
处理程序),但如果UI包含多个文本框,您可能希望使其更加自动化。
下面的类公开了两个静态方法,AttachGotLostFocusEvents和DetachGotLostFocusEvents; 他们接受ControlCollection和两个事件处理程序。
internal static class ControlHelper { private static bool IsGotLostFocusControl(Control ctl) { return ctl.GetType().IsSubclassOf(typeof(TextBoxBase)) || (ctl.GetType() == typeof(ComboBox) && (ctl as ComboBox).DropDownStyle == ComboBoxStyle.DropDown); } public static void AttachGotLostFocusEvents( System.Windows.Forms.Control.ControlCollection controls, EventHandler gotFocusEventHandler, EventHandler lostFocusEventHandler) { foreach (Control ctl in controls) { if (IsGotLostFocusControl(ctl)) { ctl.GotFocus += gotFocusEventHandler; ctl.LostFocus += lostFocusEventHandler ; } else if (ctl.Controls.Count > 0) { AttachGotLostFocusEvents(ctl.Controls, gotFocusEventHandler, lostFocusEventHandler); } } } public static void DetachGotLostFocusEvents( System.Windows.Forms.Control.ControlCollection controls, EventHandler gotFocusEventHandler, EventHandler lostFocusEventHandler) { foreach (Control ctl in controls) { if (IsGotLostFocusControl(ctl)) { ctl.GotFocus -= gotFocusEventHandler; ctl.LostFocus -= lostFocusEventHandler; } else if (ctl.Controls.Count > 0) { DetachGotLostFocusEvents(ctl.Controls, gotFocusEventHandler, lostFocusEventHandler); } } } }
表单中的用法示例:
private void Form_Load(object sender, EventArgs e) { ControlHelper.AttachGotLostFocusEvents( this.Controls, new EventHandler(EditControl_GotFocus), new EventHandler(EditControl_LostFocus)); } private void Form_Closed(object sender, EventArgs e) { ControlHelper.DetachGotLostFocusEvents( this.Controls, new EventHandler(EditControl_GotFocus), new EventHandler(EditControl_LostFocus)); } private void EditControl_GotFocus(object sender, EventArgs e) { ShowKeyboard(); } private void EditControl_LostFocus(object sender, EventArgs e) { HideKeyboard(); }
使用InputPanel类 。 在获得焦点时启用它,在失去焦点时禁用它。
- 无法通过WCF中的构造函数初始化成员
- 定时器比间隔多10 ms
- 让方法采用c#中的任何数据类型
- 当DbDataAdapter.Update调用时,为什么我使用ODP.NET OracleDataAdapter获取OracleTruncateException而不使用System.Data.OracleClient的适配器?
- 如何解决IReadOnlyDictionary缺乏协方差?
- 从二进制文件中读取变量大小的字符串(VB6与C#)
- 使用Fiddler与Windows存储unit testing
- Usinq Linq选择半逗号分隔字符串中的项目?
- AutoFixture无法创建CreateAnonymous MVC Controller