• 揭秘界面控件DevExpress WinForms为何弃用受关注的MaskBox属性


    获取DevExpress WinForms v22.1正式版下载

    在官方技术团队发布的v20.2版本周期中,宣布了高级文本编辑器模式的可用性,高级文本编辑器模式引入了许多具有影响力的功能,包括插入符号/选择动画支持和嵌入式文本标签。在当时的发布公告中详细说明了未来的计划,以及官方技术团队在所有报告的问题得到解决后将其设为默认编辑器模式,虽然还没有将此设置为默认模式,但最新的WXI皮肤是朝着这个目标迈出的一大步。

    当WXI皮肤处于激活状态时,所有文本编辑器都会切换到此高级模式。在这方面,有色文本选择可能是一个线索,但它肯定不是切换的唯一原因。 在新的 WXI 皮肤中,编辑器使用与不同编辑器状态相对应的附加背景元素,更多元素意味着额外的客户区和边界计算、增加的边界和内容绘制逻辑以及整体复杂性的增加。 在标准模式下解决这些挑战会产生副作用和伪影,因此技术团队决定利用高级模式的力量来解决这些问题。

    WXI皮肤中使用高级模式引发了围绕遗留代码(专为遗留、非高级编辑器模式编写的代码)兼容性的内部讨论,最受关注的当然是MaskBox 属性。 此属性允许您获得标准的 WinForms 文本框控件(DevExpress WinForms TextEdit 编辑器的基础),但高级模式下的TextEdits是完整的自定义控件并且不再基于标准TextBoxes,这些编辑器的 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;
    }
    掩码和文本处理 API

    在之前的发布周期中,我们引入了一系列方法来帮助获取和修改编辑器文本:

    这些方法与标准TextBox方法相同,例如TextBoxBase.GetCharFromPosition(Point)。 如果您检索标准TextBox来利用其方法,现在可以使用本机TextEdit API来获得相同的结果。

    至于低级输入掩码,我们最近添加了EnableCustomMaskTextInput方法,此方法允许您手动跟踪用户操作并根据需要分配编辑器值。

    例如,如果您需要限制用户输入的字节数,以前的版本要求您使用重写的 TextEdit.CreateMaskBoxInstance 方法实现自定义 TextEdit 后代,该方法接受自定义 TextBoxMaskBox 对象。 然后,这个自定义类将处理用户输入。

    使用EnableCustomMaskTextInput方法,您不再需要任何继承逻辑,只需在分配的回调中直接检查字节长度。

    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;
    }
    MaskBox 弃用

    总而言之,我们更新的 TextEdit API 允许您解决以前需要使用 MaskBox 属性的所有流行使用场景。 这意味着现在可以弃用这个属性,但并不是完全删除此属性,使您现有的代码无效。相反,我们现在认为所有与 MaskBox 相关的场景都已过时,并建议使用我们的原生编辑器 API。

    DevExpress WinForm | 下载试用

    DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!


    DevExpress技术交流群6:600715373      欢迎一起进群讨论

    更多DevExpress线上公开课、中文教程资讯请上中文网获取

     
  • 相关阅读:
    从汇编看c++对静态成员的存取
    从汇编看c++内联函数评估求值
    从汇编看c++初始化列表初始化成员变量
    53. sql2005“备份集中的数据库备份与现有的xx数据库不同”解决方法
    52. 查看linux系统是32位还是64位
    51. linux卸载jdk
    50. linux下查看tomcat日志
    49. jdk-6u45-linux-i586.bin安装步骤
    48. Linux 删除文件夹命令
    47. linux下给已经存在的用户设置用户组
  • 原文地址:https://www.cnblogs.com/AABBbaby/p/16527538.html
Copyright © 2020-2023  润新知