原創(chuàng)|行業(yè)資訊|編輯:龔雪|2022-07-27 10:48:28.377|閱讀 154 次
概述:本文將為大家揭秘DevExpress炙手可熱的WinForms控件為何要在新版中棄用受關(guān)注的MaskBox屬性,歡迎下載最新版產(chǎn)品體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
獲取DevExpress WinForms v22.1正式版下載
在官方技術(shù)團(tuán)隊(duì)發(fā)布的v20.2版本周期中,宣布了高級(jí)文本編輯器模式的可用性,高級(jí)文本編輯器模式引入了許多具有影響力的功能,包括插入符號(hào)/選擇動(dòng)畫支持和嵌入式文本標(biāo)簽。在當(dāng)時(shí)的發(fā)布公告中詳細(xì)說明了未來的計(jì)劃,以及官方技術(shù)團(tuán)隊(duì)在所有報(bào)告的問題得到解決后將其設(shè)為默認(rèn)編輯器模式,雖然還沒有將此設(shè)置為默認(rèn)模式,但最新的WXI皮膚是朝著這個(gè)目標(biāo)邁出的一大步。
當(dāng)WXI皮膚處于激活狀態(tài)時(shí),所有文本編輯器都會(huì)切換到此高級(jí)模式。在這方面,有色文本選擇可能是一個(gè)線索,但它肯定不是切換的唯一原因。 在新的 WXI 皮膚中,編輯器使用與不同編輯器狀態(tài)相對(duì)應(yīng)的附加背景元素,更多元素意味著額外的客戶區(qū)和邊界計(jì)算、增加的邊界和內(nèi)容繪制邏輯以及整體復(fù)雜性的增加。 在標(biāo)準(zhǔn)模式下解決這些挑戰(zhàn)會(huì)產(chǎn)生副作用和偽影,因此技術(shù)團(tuán)隊(duì)決定利用高級(jí)模式的力量來解決這些問題。
在WXI皮膚中使用高級(jí)模式引發(fā)了圍繞遺留代碼(專為遺留、非高級(jí)編輯器模式編寫的代碼)兼容性的內(nèi)部討論,最受關(guān)注的當(dāng)然是 屬性。 此屬性允許您獲得標(biāo)準(zhǔn)的 WinForms 文本框控件(DevExpress WinForms TextEdit 編輯器的基礎(chǔ)),但高級(jí)模式下的TextEdits是完整的自定義控件并且不再基于標(biāo)準(zhǔn),這些編輯器的 MaskBox 屬性返回 null(在 VB.NET 中為空)。
技術(shù)團(tuán)隊(duì)分許了許多支持中心的問題,來尋找需要通過MaskBox 屬性訪問標(biāo)準(zhǔn)文本框的實(shí)際用例。根據(jù)研究表明,這些案例中大多數(shù)屬于兩個(gè)主要類別:自動(dòng)完成和文本處理(包括自定義輸入掩碼)。
現(xiàn)在可以通過本機(jī) TextEditor API 使用自動(dòng)完成功能,要引入自動(dòng)完成功能,請(qǐng)設(shè)置 Editor.AdvancedModeOptions.AutoCompleteSource 屬性以指定編輯器是否建議來自您的自定義數(shù)據(jù)源或自動(dòng)填充源的條目(最近的項(xiàng)目、歷史列表中的 URL、系統(tǒng)文件和文件夾名稱等)。您需要指定適當(dāng)?shù)哪J剑⊿uggest、Append、兩者的組合或 SuggestSingleWord),并分配自定義數(shù)據(jù)源(如果選擇了CustomSource自動(dòng)完成模式)。
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; }
在之前的發(fā)布周期中,我們引入了一系列方法來幫助獲取和修改編輯器文本:
這些方法與標(biāo)準(zhǔn)TextBox方法相同,例如。 如果您檢索標(biāo)準(zhǔn)TextBox來利用其方法,現(xiàn)在可以使用本機(jī)TextEdit API來獲得相同的結(jié)果。
至于低級(jí)輸入掩碼,我們最近添加了方法,此方法允許您手動(dòng)跟蹤用戶操作并根據(jù)需要分配編輯器值。
例如,如果您需要限制用戶輸入的字節(jié)數(shù),以前的版本要求您使用重寫的 TextEdit.CreateMaskBoxInstance 方法實(shí)現(xiàn)自定義 TextEdit 后代,該方法接受自定義 TextBoxMaskBox 對(duì)象。 然后,這個(gè)自定義類將處理用戶輸入。
使用方法,您不再需要任何繼承邏輯,只需在分配的回調(diào)中直接檢查字節(jié)長度。
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 屬性的所有流行使用場(chǎng)景。 這意味著現(xiàn)在可以棄用這個(gè)屬性,但并不是完全刪除此屬性,使您現(xiàn)有的代碼無效。相反,我們現(xiàn)在認(rèn)為所有與 MaskBox 相關(guān)的場(chǎng)景都已過時(shí),并建議使用我們的原生編輯器 API。
DevExpress WinForm擁有180+組件和UI庫,能為Windows Forms平臺(tái)創(chuàng)建具有影響力的業(yè)務(wù)解決方案。DevExpress WinForms能完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序,無論是Office風(fēng)格的界面,還是分析處理大批量的業(yè)務(wù)數(shù)據(jù),它都能輕松勝任!
DevExpress技術(shù)交流群6:600715373 歡迎一起進(jìn)群討論
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)