首页 > 其他分享 >重新审视下拉控件

重新审视下拉控件

时间:2022-09-19 20:57:36浏览次数:105  
标签:控件 自定义 审视 Windows ComboBox 动画 重新 使用

发表于2012 年 3 月 21 日

不时返回并重新检查旧代码是个好主意。随着时间的推移,会有更多的知识和新的技巧;在我早期的两个自定义 Windows 窗体控件的情况下,这当然是正确的。您可能还记得我的带有分组支持的 ComboBox 控件,以及带有 TreeView 下拉菜单的 ComboBox - 我重新审视了这些控件,特别注意实现我从使用Buffered Paint API的经验中学到的东西。

GroupedComboBox 和 ComboTreeBox 的新版本

分组组合框

为了刷新你的记忆,这个控件扩展了 ComboBox 并添加了一个新属性;组员。使用 PropertyDescriptor 和 owner-drawing,它将分组值相等的项目组合在一起。

什么是新的:

  • 在 Windows Vista 和 7 上,控件没有以与 DropDownList 模式下的普通 ComboBox 控件一致的“按钮样式”出现;这是所有者绘图的限制,但可以通过使用 VisualStyleRenderer 来克服。这是一个有点狡猾的 hack,因为它预先假定 ComboBox 在此模式下的外观,但该功能仅在操作系统被识别为 Vista 或 7 时应用。
  • 该控件与其他 ComboBox 控件不一致,因为它没有动画。使用我开发的 BufferedPainter<T> 类,实现缓冲动画很简单。

组合树框

ComboTreeBox 是一个完全从头开始开发的控件(即它的基类是 Control),它使用分层/树结构作为其数据表示(而不是平面列表)。因此,它与 ComboBox 和 TreeView 有共同的行为。控件的下拉/弹出部分使用 ToolStripDropDown、位图缓存和自定义呈现来实现。

什么是新的:

  • 与 GroupedComboBox 一样,该控件没有出现在 Windows Vista/7 样式中。由于该控件没有可编辑部分并且完全是所有者绘制的,因此很容易在适当的操作系统下模拟外观。在 XP 下,它回退到默认的视觉样式。当主题被禁用时,它会采用经典风格。
  • 控件没有动画。再次使用 BufferedPainter<T> 来实现动画。
  • 由于对其设计器类的强类型引用,该控件以前不能与 .NET Framework 的“客户端配置文件”版本一起使用。相当厚颜无耻的是,我用我的自定义设计器代替了 DomainUpDown 控件使用的内置设计器——这对于限制控件的高度非常有效,并且避免了引用 System.Design 程序集的需要(仅包含在完整版本的框架)。
  • 对重点项目的绘制方式进行了微调;这仅在 Windows 中启用焦点提示时才明显。

https://www.brad-smith.info/blog/archives/477

标签:控件,自定义,审视,Windows,ComboBox,动画,重新,使用
From: https://www.cnblogs.com/firespeed/p/16709009.html

相关文章

  • 具有分组功能的 ComboBox 控件
    发表于2010年6月24日 Windows窗体ComboBox控件是一个出色的用户界面组件,适用于您希望向用户呈现一组离散的选项或邀请他们输入任意字符串值的情况。它不会对可用......
  • elementui-dialog重新渲染
    父组件key值不同即可重新渲染组件,每次打开dialog修改diaid值刷新数据 <el-dialogv-model="isDia":title="diaTiTle"......
  • Toolbar工具条控件style样式使用感受和用法分享
    Toolbar工具条不知道能不能代替plus做成大按钮样式.....它的style样式有好多种,下面记录下自己使用过程常规样式importwin.ui;importwin.ui.toolbar;/*DSG{{*/va......
  • cnpm重新安装
    cnpm卸载与安装步骤当cnpm安装不正确时或是使用cnpm-v无反应时可以考虑重装cnpm1.卸载原有旧的版本:npmuninstall-gcnpm--registry=https://registry.npm.taobao.or......
  • python3--重新排列单词间的空格
    class Solution:    def reorderSpaces(self, text: str) -> str:        count=text.count(' ')#字符串中空格的数量        li=text.s......
  • 1592. 重新排列单词间的空格
    1592.重新排列单词间的空格给你一个字符串text,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。......
  • global 声明全局变量、作用域、及重新定义变量值可以让global失效
    global声明全局变量,非常重要的。#global声明全局变量后,再对此变量赋值是不起作用的#global声明全局变量后,不能再在别的地方global声明相同名称的变量。global_var='b......
  • C# WinForm 按名称查找控件
    1///<summary>2///按名称查找控件3///</summary>4///<paramname="parentControl">查找控件的父容器控件</param>5///<paramname="findCtrlName">查......
  • 【WPF】自定义用户控件 代有字数限制的输入框
    最终效果  用户控件WPF用户控件继承UserControl类,其行为与WPF窗口非常相似:有一个XAML文件和一个代码后置文件。在XAML文件中,您可以添加现有的WPF控件以创建所需的外......
  • 在 Ruby/Rails 中重新格式化时间戳
    在Ruby/Rails中重新格式化时间戳ImagebyPexels,PixaBay.com,LicensedunderCC0任何在Ruby/Rails应用程序上工作的程序员都见过t.timestamps在他们的Active......