c# - 继承默认 ComboBox 以更改边框颜色或禁用它

标签 c# .net vb.net winforms user-controls

我在 WinForms 项目中工作。

我在 Windows 中激活了一个深色主题,这是聚焦时的默认组合框:

enter image description here

这是没有焦点的时候:

enter image description here

当控件失去焦点时会出现一个可怕而疯狂的白色边框,我想在不禁用项目中的 XP 样式的情况下避免这种情况。

我知道也许唯一的方法是继承控件来制作我自己的控件,问题是我不知道我需要用控件做什么,也许更改 setstyle 属性或者我不知道。

最佳答案

我认为您正在尝试解决不在您的应用程序范围内的问题。这不只是您正在使用的相关主题的问题吗?

Windows 有很多主题。仍然支持的主要主题是 Classic(XP 之前的版本)、Luna (XP)、Aero (Vista/Win7) 和 Modern (Windows 8)。所有这些都可以定制,以创建无限数量的可能场景。

大多数 Windows 窗体控件都是基于操作系统根据这些系统主题绘制的 Win32 控件。

因此,您必须明白,在您正在测试的机器上,您所看到的内容与应用程序用户在具有不同用户首选项的不同版本的 Windows 上看到的内容会有很大差异。

一个简单的事实是,如果您使用 WinForms 基本控件,您确实应该尽可能多地将对外观的控制交给操作系统。

创建您自己的应用程序主题也被广泛接受,用户无法更改,或者他们必须从您创建的一组预定主题中进行选择。这方面的示例包括 Google Chrome、iTunes、Winamp 等。使用简单的 Win32 控件执行此操作通常需要大量工作,除非您使用 WPF 之类的工具来简化操作。

重要的是您不能真正挑选应用程序的哪些部分作为主题。如果您希望它看起来一致,您要么自己负责整个主题,要么遵循使用系统资源颜色(如 ControlText、ActiveBorder、AppWorkspace 等)的 Windows 标准。

关于c# - 继承默认 ComboBox 以更改边框颜色或禁用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699980/

相关文章:

c# - 在 Moq 中检查设置的表达式输入参数

c# - 用于唯一标识节点的最佳集合是什么?

c# - 根据执行 HttpWebRequest 的位置获得不同的响应

database - 如何使用 vb.net 备份 PostgreSQL

加载程序集时未找到 VB.NET 方法

c# - 如何从 .Net 打印对话框中删除打印机?

javascript 无法读取 null 的属性 'style'

java - C# 与 JAVA - 解释 Java 字节码与 JITing 有什么好处?

c# - 在不标记成员的情况下使用 ProtoBuf.NET 进行序列化

javascript - 从代码后面传递的转义撇号