原創|行業資訊|編輯:龔雪|2022-07-27 10:48:28.377|閱讀 154 次
概述:本文將為大家揭秘DevExpress炙手可熱的WinForms控件為何要在新版中棄用受關注的MaskBox屬性,歡迎下載最新版產品體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
獲取DevExpress WinForms v22.1正式版下載
在官方技術團隊發布的v20.2版本周期中,宣布了高級文本編輯器模式的可用性,高級文本編輯器模式引入了許多具有影響力的功能,包括插入符號/選擇動畫支持和嵌入式文本標簽。在當時的發布公告中詳細說明了未來的計劃,以及官方技術團隊在所有報告的問題得到解決后將其設為默認編輯器模式,雖然還沒有將此設置為默認模式,但最新的WXI皮膚是朝著這個目標邁出的一大步。
當WXI皮膚處于激活狀態時,所有文本編輯器都會切換到此高級模式。在這方面,有色文本選擇可能是一個線索,但它肯定不是切換的唯一原因。 在新的 WXI 皮膚中,編輯器使用與不同編輯器狀態相對應的附加背景元素,更多元素意味著額外的客戶區和邊界計算、增加的邊界和內容繪制邏輯以及整體復雜性的增加。 在標準模式下解決這些挑戰會產生副作用和偽影,因此技術團隊決定利用高級模式的力量來解決這些問題。
在WXI皮膚中使用高級模式引發了圍繞遺留代碼(專為遺留、非高級編輯器模式編寫的代碼)兼容性的內部討論,最受關注的當然是 屬性。 此屬性允許您獲得標準的 WinForms 文本框控件(DevExpress WinForms TextEdit 編輯器的基礎),但高級模式下的TextEdits是完整的自定義控件并且不再基于標準,這些編輯器的 MaskBox 屬性返回 null(在 VB.NET 中為空)。
技術團隊分許了許多支持中心的問題,來尋找需要通過MaskBox 屬性訪問標準文本框的實際用例。根據研究表明,這些案例中大多數屬于兩個主要類別:自動完成和文本處理(包括自定義輸入掩碼)。
現在可以通過本機 TextEditor API 使用自動完成功能,要引入自動完成功能,請設置 Editor.AdvancedModeOptions.AutoCompleteSource 屬性以指定編輯器是否建議來自您的自定義數據源或自動填充源的條目(最近的項目、歷史列表中的 URL、系統文件和文件夾名稱等)。您需要指定適當的模式(Suggest、Append、兩者的組合或 SuggestSingleWord),并分配自定義數據源(如果選擇了CustomSource自動完成模式)。
using DevExpress.XtraEditors; void OnFormLoad(object sender, EventArgs e) { var DaysOfTheWeek = new AutoCompleteStringCollection(); DaysOfTheWeek.AddRange(new string[] {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}); textEdit1.Properties.UseAdvancedMode = DevExpress.Utils.DefaultBoolean.True; textEdit1.Properties.AdvancedModeOptions.AutoCompleteMode = TextEditAutoCompleteMode.SuggestAppend; textEdit1.Properties.AdvancedModeOptions.AutoCompleteSource = AutoCompleteSource.CustomSource; textEdit1.Properties.AdvancedModeOptions.AutoCompleteCustomSource = DaysOfTheWeek; }
在之前的發布周期中,我們引入了一系列方法來幫助獲取和修改編輯器文本:
這些方法與標準TextBox方法相同,例如。 如果您檢索標準TextBox來利用其方法,現在可以使用本機TextEdit API來獲得相同的結果。
至于低級輸入掩碼,我們最近添加了方法,此方法允許您手動跟蹤用戶操作并根據需要分配編輯器值。
例如,如果您需要限制用戶輸入的字節數,以前的版本要求您使用重寫的 TextEdit.CreateMaskBoxInstance 方法實現自定義 TextEdit 后代,該方法接受自定義 TextBoxMaskBox 對象。 然后,這個自定義類將處理用戶輸入。
使用方法,您不再需要任何繼承邏輯,只需在分配的回調中直接檢查字節長度。
using DevExpress.Data.Mask; int m_maxByteLength = 5; textEdit1.Properties.EnableCustomMaskTextInput(args => { // Do nothing if no edits were made if (args.IsCanceled || args.ActionType == CustomTextMaskInputAction.Init) return; if (GetByteLength(args.ResultEditText) > m_maxByteLength) { args.Cancel(); return; } args.SetResult( args.ResultEditText, args.ResultCursorPosition, args.ResultSelectionAnchor); }); int GetByteLength(string text) { return System.Text.Encoding.Default.GetBytes(text).Length; }
總而言之,我們更新的 TextEdit API 允許您解決以前需要使用 MaskBox 屬性的所有流行使用場景。 這意味著現在可以棄用這個屬性,但并不是完全刪除此屬性,使您現有的代碼無效。相反,我們現在認為所有與 MaskBox 相關的場景都已過時,并建議使用我們的原生編輯器 API。
DevExpress WinForm擁有180+組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
DevExpress技術交流群6:600715373 歡迎一起進群討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網