如何在启用视觉样式的情况下将控件渲染为看起来像 ComboBox?

2024-04-12

我有一个模仿的控件ComboBox。我想渲染该控件以便该控件border看起来像标准的Windows 组合框。具体来说,我遵循了 MSDN 文档,除了禁用控件时的渲染之外,所有控件的渲染都是正确的。

需要明确的是,这是针对具有视觉风格已启用。此外,除了禁用控件周围的边框(与禁用控件不匹配)之外,控件的所有部分都正确呈现组合框边框 colour.

我正在使用视觉风格渲染器班级。 MSDN 建议使用VisualStyleElement.TextBox元素为TextBox的一部分ComboBox控制但标准禁用TextBox和一个标准的残疾人ComboBox绘制略有不同(一个具有浅灰色边框,另一个具有浅蓝色边框)。

如何在禁用状态下正确呈现控件?


我不能 100% 确定这是否是您正在寻找的内容,但您应该查看视觉风格渲染器在 System.Windows.Forms.VisualStyles 命名空间中。

  1. VisualStyleRenderer 类 http://msdn.microsoft.com/en-us/library/system.windows.forms.visualstyles.visualstylerenderer.aspx (MSDN)
  2. 如何:渲染视觉样式元素 http://msdn.microsoft.com/en-us/library/ms171735.aspx (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled http://msdn.microsoft.com/en-us/library/system.windows.forms.visualstyles.visualstyleelement.combobox.dropdownbutton.disabled.aspx (MSDN)

由于如果用户未启用视觉样式(他/她可能运行“经典模式”或 Windows XP 之前的操作系统),VisualStyleRenderer 将无法工作,因此您应该始终回退到 ControlPaint 类。

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

然后在绘图时这样做:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在启用视觉样式的情况下将控件渲染为看起来像 ComboBox? 的相关文章

随机推荐

  • MySQL中如何查询某列的变化次数

    我有一个表存储具有两个属性的项目 所以该表有三列 item id property 1 property 2 insert time 1 10 100 2012 08 24 00 00 01 1 11 100 2012 08 24 00 0
  • 如何从命令行运行单个 gradle 任务

    在我的项目中 我的 build gradle 中有几个任务 我希望这些任务在运行时是独立的 即我需要从命令行运行单个任务 但是命令 gradle taskA 将同时运行我不想要的taskA和taskB 如何阻止任务正在运行 这是我正在做的事
  • boost.test 与 CppUnit

    我已经使用 CppUnit 一段时间了 并且对此感到满意 随着我们使用 boost 库的越来越多的部分 我对 boost test 进行了简短的了解 现在我想知道是否应该在新项目中切换到 boost test 这里有人能告诉我这两个框架之间
  • 哪个队列与 requestAnimationFrame 关联?

    今天我在接受采访时被问到这个问题 我无法回答这个问题 面试官说有一个特殊的队列用于 requestAnimationFrame 回调 但我找不到任何这方面的信息 如果 rAF 有它自己的队列 那么为什么这个队列从未在任何地方被提及 当我们谈
  • 任何免费的 UPC/条形码 DB [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 Windows 身份验证可以从本地到服务器工作,但不能从服务器到服务器工作?

    我有两个网站 A and B A使用一个 APIB暴露 并且B需要 Windows 身份验证 两个站点都位于域中D API 通过以下方式使用HttpClient 以及当站点A在我的域帐户下本地运行 位于 DomainP 访问被授予 在这种情
  • Webdriver (c#) - 大概通过文本查找按钮

    我正在努力抓住按钮 有人能向我指出如何获取按钮句柄并使用 xpath 或 css 选择器单击它的正确方向吗 这是代码
  • 将字符串转换为静态字符串

    Swift 3 0 有没有办法获得StaticString键入一个String类型哪个复杂 示例 需要转换才能工作 let aString StaticString One part Second part 这是不可能的 因为StaticS
  • 在 Swift 中解码 JSON 中的 base64_encode 图像

    我有一个 mysql 数据库 其中包含一些图像 我从 php 文件接收数据 php result key image based64 encode resultArray key image 现在有了 Json 文件 我得到如下内容 Jso
  • 如何在CSS中绘制可配置的饼图

    从链接http www kylejlarson com blog 2011 how to create pie charts with css3 http www kylejlarson com blog 2011 how to creat
  • 切片 Pandas 时出现值错误

    我有一个 DataFrame 我想使用 string contains 方法 我相信当我阅读时我已经找到了如何做到这一点pandas dataframe 按部分字符串选择 https stackoverflow com questions
  • android:如何检查应用程序是否在后台运行2

    我有解决办法 public static boolean isApplicationSentToBackground final Context context ActivityManager am ActivityManager cont
  • 如何使用expo文件系统保存图库中的二维码

    我正在使用 expo 开发一个 React Native 项目 它包括创建一个二维码 我已经完成了 将二维码转换为图像 然后将其保存到图库 我想将 QR 码转换为图像 然后将其保存到我的图库中或共享 在下面给出的代码中 在编译时会出现错误
  • C++ 将基础对象类型转换为派生对象

    所以我有一个动态分配的基类数组 我在数组中存储了其派生类的一些对象 学生 基 类及其派生类都有一个getInfo 函数 显然派生类已经覆盖了该基类getInfo 目标是使用getinfo从基类中获取函数 然后将派生类的两个对象键入类 返回派
  • LINQ Count ..最好的方法

    我的公司刚刚开始使用 LINQ 但我仍然对 LINQ 命令和 SQL 的抽象性 如果这是一个词的话 有一些疑问 我的问题是 Dim query From o In data Addresses Select o Name Count 在我看
  • 错误:参数类型不兼容

    我正在用 C 写一个列表 以下是来源 include
  • Android Volley 库无法处理 204 和空主体响应

    我正在使用最新的 Volley 库 当我的 api 返回 204 且响应中没有正文时 我遇到了问题 BasicNetwork java 中的以下代码似乎未按预期工作 Some responses such as 204s do not ha
  • 在 junit 中模拟 System.getenv 调用时遇到问题

    我正在尝试使用 junit 和mockito 对此非常新 为 Spring Boot 应用程序编写单元测试 基本上在我的代码中 我已经为 manifest yml 文件 用于部署 中的特定 URL 指定了一个环境变量 我可以通过它访问Str
  • Object.assign 未按预期工作

    我有一个名为 bookings 的对象 其中有几个属性 我想使用 Object assign 进行扩展 如下所示 let data Object assign booking hiw event hiw booking locale tip
  • 如何在启用视觉样式的情况下将控件渲染为看起来像 ComboBox?

    我有一个模仿的控件ComboBox 我想渲染该控件以便该控件border看起来像标准的Windows 组合框 具体来说 我遵循了 MSDN 文档 除了禁用控件时的渲染之外 所有控件的渲染都是正确的 需要明确的是 这是针对具有视觉风格已启用