处理并验证TextBox,RichTextBox和ComboBox中的输入键入和按键,显示自定义气球提示消息
介绍
HandlEdInput
处理和验证输入键入和按下的键TextBox
,RichTextBox
并ComboBox
显示自定义气球提示消息。
由于其使用简单,加上高度可定制的属性,不仅可以阻止输入输入和按键,还可以通过使用正则表达式进行ComboBox
验证,还可以验证输入的输入是否在项目列表中,包括更多功能。
这是它可以做什么的列表。
处理(控制输入)
- 从输入输入中阻止alpha
- 从输入输入中阻止数字
- 阻止输入输入中的非字母数字
- 阻止一个,部分或全部以上
- 仅允许特定字符,并拒绝输入键入的其余字符
- 仅拒绝特定字符并允许其余输入输入
- 阻止特定密钥生效,即阻塞空格或退格键
- 阻止控件中的任何键盘快捷键以及上下文菜单
- 每个字符仅允许一个间距
- 在输入的第一个开头禁用间距
- 通过正则表达式模式验证输入
-
验证
ComboBox
来自项目列表的输入与否 - 新! 处理粘贴命令
- 新! 禁用文本选择
-
新!
消息(在每个检测到的操作中显示自定义气球提示)
- 设置消息标题
- 设置消息的内容
- 选择信息,错误,警告或无图标
-
在内容消息中使用动态替换的参数,即“你按下
{KeyData}
” - 更改消息预设的默认语言
- 更改气球提示的超时
- 设置任何显示的气球提示案例的可见性
- 隐藏所有气球提示
- 和更多...
最好的部分是所有这些设置都可以以非常简单的方式组合。
例如,假设您要捕获电话号码。
- 您可以轻松地开始阻止数字以外的任何内容。
- 然后你可以包括字符:+() -
- 为了验证输入,您可以包含正则表达式模式。
- 您可以设置为每个字符允许一个间距。
- 最后,您可以在存在正则表达式不匹配模式或匹配模式时自定义气球提示。
背景
我开始这个供个人使用,我需要一些强大的输入类型处理程序,用于我正在处理的项目,而不是仅为输入阻塞编写必要的代码。所以我认为有一个通用,灵活和完整的解决方案来限制和控制输入类型是有用的,这就是这个项目诞生的方式。起初,它是一个非常简单的代码,并满足了我当时的需求。但是几天之后,我决定继续我的工作,考虑可以纳入的新的有用的想法,并在几周的工作之后......现在它已经准备好被分享了。
预览
使用代码
首先,你必须通过TextBox
,RichTextBox
或ComboBox
对类实例声明控制。
Handled.Input T1 = new Handled.Input(textBox1);
(提示:如果您希望多个控件的行为相同,您也可以传递多个用逗号分隔的控件)。
然后,您可以使用类的实例对象开始设置。
Handled.Input T1 = new Handled.Input(textBox1);
T1.Handler.Settings.Set_BlockadeMode = true;
T1.Handler.Handle_Numeric = true;
T1.Handle();
给出的示例是关于如何仅允许数字作为输入的简单演示。
让我们进入更高级的控制处理
Handled.Input T2 = new Handled.Input(textBox2);
T2.Handler.Handle_NonAlphanumeric = true;
T2.Handler.List_IncludeChars = new List<char> { '_', '-', '.' };
T2.Handler.List_RestrictKeys = new List<string> { "Space" };
T2.Message.OnFocus.Set_Title = "Please enter a username";
T2.Message.OnFocus.Set_Message =
"Username can only contain {tokens} including the following characters:\n{include_chars}";
T2.Message.OnInvalidInput.Set_Icon = Handled.BalloonTip.ICON.ERROR;
T2.Message.OnInvalidInput.Set_Title = "Invalid";
T2.Message.OnInvalidInput.Set_Message = "Enter a valid input.";
T2.Message.OnIncludeChars.Set_Visible = false;
T2.Message.Settings.Set_AllTimeouts = 5000;
T2.Handle();
声明类实例后,将控件传递给handle:
- 阻止任何非字母数字字符
- 仅包含以下字符:_ -
- 限制任何可能的空白输入
- 为气球提示焦点消息设置消息标题及其内容
- 设置自定义图标,邮件标题和气球提示无效邮件的内容
- 将包含的字符消息可见性设置为隐藏
- 将气球提示超时延长至5秒
- 最后确认处理控件
(注意:设置顺序无关紧要,只要它以类实例声明开头并使用Handle()
方法完成)。
更高级的示例将包括正则表达式验证
Handled.Input T3 = new Handled.Input(textBox3);
T3.Handler.Settings.Set_BlockadeMode = true;
T3.Handler.Handle_Alpha = true;
T3.Handler.List_RestrictKeys = new List<string> { "Space" };
T3.Handler.Settings.Set_RegexMatchPattern = "^(=[MDCLXVI])M*DC{0,4}LX{0,4}VI{0,4}$";
T3.Handler.Settings.Set_RegexOptions =
System.Text.RegularExpressions.RegexOptions.IgnoreCase;
T3.Handler.Settings.Set_ShortcutsEnabled = false;
T3.Message.OnFocus.Set_Message = "Enter a roman number.";
T3.Message.OnRegexMismatch.Set_Message = "Type a valid roman number.";
T3.Message.OnRegexMatch.Set_Message = "The roman number is valid.";
T3.Message.OnRestrictKeys.Set_Visible = false;
T3.Handle();
声明类实例后,将控件传递给handle:
- 启用阻塞模式,这意味着它将反转处理并开始禁用所有字符类型(字母,数字和非字母数字)
- 仅允许使用字母字符
- 限制任何可能的空白输入
- 将正则表达式模式设置为仅匹配有效的罗马数字
- 表示正则表达式的行为不区分大小写(这也可以在正则表达式模式中设置,但在这种情况下的目的是显示正则表达式选项属性)
- 禁用控件内的任何快捷键组合(Ctrl + A,Ctr + C,Ctrl + V ..),同时禁用其上下文菜单
- 设置气球提示焦点消息的内容
- 设置气球提示正则表达式不匹配消息的内容
- 设置气球提示正则表达式匹配消息的内容
- 当检测到除alpha之外的字符时,隐藏限制键气球提示消息的可见性
- 最后确认处理控件
现在让我们看一个简单的ComboBox验证示例
Handled.Input C1 = new Handled.Input(comboBox1);
C1.Handler.Settings.Set_BlockadeMode = true;
C1.Handler.Handle_Numeric = true;
C1.Handler.Settings.Set_ComboBoxValidator = true;
C1.Message.OnFocus.Set_Title = "Set Day";
C1.Message.OnFocus.Set_Message = "Please set the day here.";
C1.Message.OnInvalidInput.Set_Message = "Set a valid day.";
C1.Message.OnComboBoxInvalidInput.Set_Message = "Set a valid day of the month.";
C1.Message.OnComboBoxValidInput.Set_Message = "The day is valid now.";
C1.Handle();
声明类实例后,将控件传递给handle:
- 启用阻止模式,禁用所有字符输入
- 仅允许数字输入
-
启用
ComboBox
验证器,这意味着它将在项目列表中查找输入的输入并进行验证 - 设置气球提示焦点消息的标题
- 设置气球提示焦点消息的内容
- 设置气球提示无效输入消息的内容(即,尝试输入字母字符)
-
设置
ComboBox
气球提示无效输入消息的内容(即,在有效数字字符上但不在ComboBox
项目列表中) -
设置
ComboBox
气球提示有效输入消息的内容 - 最后确认处理控件
消息参数
您可以为气球提示消息使用一组参数。
这些参数将实时替换为一些有用的信息,例如,为了让用户在第一时间知道哪个是输入控件的有效输入,您将在焦点消息中使用如下内容:“输入可以仅包含 {tokens} ,包括以下字符:\ n {include_chars}。“
可以使用的参数如下:
-
{tokens}
=显示允许的令牌 -
{KeyChar}
=显示按下的字符 -
{KeyData}
=显示按下的键的名称 -
{exclude_chars}
=显示排除字符列表 -
{include_chars}
=显示包含字符的列表 -
{restrict_keys}
=显示限制键列表
建议
添加了可选的自定义控件。这些自定义控件现在可以通过支持 两种方式的文本Drop
和 Paste
处理(键盘快捷键和上下文菜单)来完全处理所有输入尝试 。
对于完整的输入处理,建议使用这些自定义控件。
您可以在Designer工具箱中找到它们。将它们添加到用户界面后,您可以自定义其行为以满足您的需求。
积分
非常感谢Chris和Ivan Petrov提供的代码,使我能够使这个项目成长,代码中的更多细节。
历史
-
2019年7月17日
-
介绍文字
Drop
上的验证支持HandledTextBox
,HandledRichTextBox
并HandledComboBox
控制!(需要Set_DropValidationOnCustomControls
启用“ ”,这也会自动设置“AllowDrop
”/“EnableAutoDragDrop
”属性) -
RTF
在textPaste
/Drop
on 时添加了格式支持 ,HandledRichTextBox
并且不需要重新格式化空格/分隔线 -
重命名属性。(“
Is_RegexValidMatch
”/“Is_ComboBoxInputOnList
”)
-
介绍文字
-
2019年7月1日
- 修复了小错误(有一种特定的方法允许在单个间距处理上粘贴另一个空格旁边的空格)
- 一些属性中的次要camelcase命名更改
-
06/29/2019 -
HandlEdInput
变得更加强大!-
添加了支持
Paste
命令处理的自定义控 - 性能改进!
-
现在,更容易更改默认的气球提示消息语言,并在
Handled.Input
类中添加自定义语言。 -
现在没有必要也将“
Control
”/“Shift
”变体(即“Space
,Control
”,“Space
,Shift
”)传递给限制键列表,以避免任何可能的方式绕过受限制的键。相反,只需传递正常情况(即“Space
”)。 -
除了限制
Space
限制键列表上的“ ”,现在您还可以在排除列表中添加空白字符以避免间距。 - 为所有类型的气球提示消息添加了单独的超时属性(可以全局设置消息设置的所有超时)
-
在焦点气球提示上,消息现在仅在输入为空时可见(仍然可以通过按“
F1
” 随时手动显示它) -
添加“
Set_ContextMenuOnCustomControls
”以定义是否设置上下文菜单HandledTextBox
,HandledRichTextBox
和HandledComboBox
。(默认值:True
) -
添加了“
Set_ContextMenuShortcutsOnCustomControls
”以定义是否将命令快捷方式设置为可见HandledTextBox
,HandledRichTextBox
HandledComboBox
上下文菜单。(默认值:True
) -
添加“
Handle_TextSelectionOnCustomTextBox
”以定义是否可以选择HandledTextBox
文本(自动添加文本选择键盘快捷键以限制键列表) -
添加“
Handle_TextSelectionOnCustomRichTextBox
”以定义是否可以选择HandledRichTextBox
文本(自动添加文本选择键盘快捷键以限制键列表) -
添加“
IsRegexValidMatch
”以编程方式查询正则表达式模式是否匹配! -
添加“
IsComboBoxInputOnList
”以编程方式查询当前输入是否列在ComboBox
列表中! - 输入无效时禁用按钮事件现在仅在相应的气球提示无效消息可见时才适用
-
当角色被删除时,“
Handle_BeginSpace
”和“Handle_OneSingleSpacing
”现在变得更加强大和智能! - 修复了在失去控制焦点时没有隐藏气球提示(即使在最小化窗口后气球提示也保持可见)
-
添加了支持