TdhComboBox 一个继承的带有只读属性的组合框

介绍 标准的组合框确实需要一个. readonly属性。我一直在使用一个组装工具来模拟只读行为——在我的表单上设置大小相同的组合框和文本框,并根据当前的“模式”将其中一个设置为。visible。 最近,阅读这篇文章激发了一些想法,如何实现ComboBox具有. readonly属性的目标,这是我所期望的。我的努力成果如下:TdhComboBox。 演示示例比较了三个标准的组合框(其中一个的. dropdownstyle属性分别设置为'DropDown '、'DropDownList'和'Simple')和三个对应的TdhComboBox实例。在屏幕截图中,标准组合框是禁用的,而TdhComboBoxes是只读的。 使用控制 要原样使用TdhComboBox,请在您的项目中添加一个对类库“TdhComboBox .dll”的引用。此库中使用的名称空间为:

using TDHControls.TDHComboBox;

TdhComboBox控件是使用VS2002(和编译)编写的。NET 1.0),目的是让其他开发人员无论使用的。NET版本是什么,都可以轻松地获得源代码。 TdhComboBox接口的新成员有: Colors_Set()——该方法根据控件的当前状态设置控件的. backcolor和. forecolor。开发人员不需要调用此方法;编写它的主要原因是用一段代码来执行这个函数(而且,由于这个方法存在,我决定公开它)。 Text_Set() -该方法的签名是:[public bool Text_Set(string setValue, bool forceIfEmptyString)]。该方法允许开发人员以编程方式从控件的项集合中选择. item——也就是说,它可以触发控件的selectedindexchangeevent。如果“setValue”的价值不是一个成员项目的收集、控制的。text属性的值将被设置为“setValue”在下列条件:1)控制的.DropDownStyle属性没有设置为“DropDownList,”或2)的价值“setValue.Trim()”是一个空字符串和“forceIfEmptyString”是“真正的价值。方法的返回值反映了. text属性的值是否被成功设置。 这个布尔属性决定控件是否处于只读模式。 这个布尔属性决定当控件处于只读模式时是否可以打开DropList。 AllowTextCut——当控制.DropDownStyle属性设置为“DropDownList,”这个布尔属性允许用户使用快捷菜单“切”或“删除”。text属性的值或“粘贴”的空白字符串对象。text属性——即使. items集合不包含空字符串或空白字符串对象。 这个布尔属性决定了控件的上下文菜单是否启用/可用。在初始化时,TdhComboBox实例构建自己的ContextMenu,或者开发人员可以通过设置标准的.ContextMenu属性来提供一个。 它应该不用说,“禁用”的颜色优先于任何颜色属性描述如下: DropDownListBackColor——当控件的. dropdownstyle属性被设置为“DropDownList”(并且该控件不是只读模式)时,这个颜色属性决定了所使用的背景颜色。 这个颜色属性决定了当控件的. dropdownstyle属性被设置为“DropDownList”时使用的前景色(并且该控件不是只读模式)。 NormalBackColor——这个颜色属性决定了通常使用的背景颜色——也就是说,当控件的. dropdownstyle属性没有设置为“DropDownList”并且该控件没有处于只读模式时。 NormalForeColor——这个颜色属性决定了前景色被正常使用——也就是说,当控件的. dropdownstyle属性没有被设置为“DropDownList”并且该控件没有处于只读模式时。 ReadOnlyBackColor——当控件处于只读模式时,这个颜色属性决定使用的背景颜色。此属性优先于. dropdownlistbackcolor和. normalbackcolor属性。 ReadOnlyForeColor -这个颜色属性决定了控件处于只读模式时使用的前景色。此属性优先于. dropdownlistforecolor和. normalforecolor属性。 TdhComboBox接口的修改(重写)成员为: BackColor - .BackColor属性没有被显式重写;但是,上面描述的新颜色属性具有优先级,可能会覆盖设置该属性的值。 抵押品——抵押品财产没有被明确地覆盖;但是,上面描述的新颜色属性具有优先级,可能会覆盖设置该属性的值。 这个属性的默认值现在是“OwnerDraw”固定和“正常”枚举值是不可选择的。控件不包含任何专门处理'OwnerDrawVariable'的代码(因此,最好坚持使用'OwnerDrawFixed')。 除了用于这些属性的代码之外,TdhComboBox的作用是作为标准的ComboBox——当然,我不能保证它是这样的。 已知的问题 在OnDrawItem()方法中,当设置. datasource属性时(相对于通过.Items. add()方法生成的项集合),决定被绘制项的字符串值的代码段*假设*项对象可以被转换为System.Data。DataRowView对象。 2006年10月12日:版本1.0.004修正了这个问题。 当(。DropDownStyle == Simple),当鼠标经过“下拉列表”时突出显示项目仍然是不完善的。具体来说,当光标移动回“virtual ClientRectangle”(由我的代码计算)时,我强制执行. invalidate(),以防用户的最后一个操作是使用控件的滚动条。invalidate()会导致滚动条返回正确的值(这很好),但是它也会触发一个绘制事件,这个事件可能在我的代码绘制/突出显示项目之后发生(从而导致突出显示消失)。 当在。net 1.1应用程序中使用该控件时,可以使用鼠标光标在组合框的编辑框部分选择文本(通过单击和拖动)。当控件在。net 1.0应用程序中使用时,这似乎不是一个选项。至少对我来说,有趣的是,在这两种情况下,DLL都是在。net 1.0下编译的。 愿望清单 改进OnDrawItem()方法中处理. datasource属性的代码。 在版本1.0.004中解决 当控件处于只读模式且。readonlyallowdrop属性为false时,想出一种隐藏“下拉箭头”的方法。 在版本1.0.004中解决 允许上下文菜单将特定的条目/项目从控件的下拉列表复制到Windows剪贴板中。 当(时,为“下拉列表”中突出显示的项目设计一个解决方案。DropDownStyle = =简单)。 历史 2006年8月18日:向Code项目提交TdhComboBox ver 1.0.001。 2006年8月25日:1.0.002版本-增加了. allowtextcut和. readonlyallowdrop属性和Colors_Set()和Text_Set(string setValue, bool forceIfEmptyString)方法。 2006年10月12日:1.0.004版本 在重写的OnDrawItem()方法中,使用基本的ComboBox . getitemtext()方法获取绘制的. item的文本值。这纠正了一个know问题。[感谢Alan Brookland的建议] 增加了逻辑覆盖(隐藏)的“下拉箭头”当['this。只读的’和‘! this.ReadOnlyAllowDrop ']。 本文转载于:http://www.diyabc.com/frontweb/news350.html

原文地址:https://www.cnblogs.com/Dincat/p/13438376.html