處理並驗證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*D?C{0,4}L?X{0,4}V?I{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 在text Paste/ 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」現在變得更加強大和智能!修復了在失去控制焦點時沒有隱藏氣球提示(即使在最小化窗口後氣球提示也保持可見)