C# 继承默认组合框以更改边框颜色或禁用边框颜色

C# 继承默认组合框以更改边框颜色或禁用边框颜色,c#,.net,vb.net,winforms,user-controls,C#,.net,Vb.net,Winforms,User Controls,我在一个WinForms项目中工作 我在Windows中激活了一个黑色主题,这是聚焦时的默认组合框: 这是它没有焦点的时候: 当控件失去焦点时,会出现一个可怕而疯狂的白色边框,我希望在不禁用项目中的XP样式的情况下避免这种情况 我知道可能唯一的方法是继承控件来创建我自己的控件,问题是我不知道我需要对控件做什么,可能是更改setstyle属性,或者我不知道。我认为您正在尝试解决一个不在应用程序范围内的问题。这不就是你正在使用的主题的问题吗 Windows有许多主题。仍然支持的主要主题是经典(X

我在一个WinForms项目中工作

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

这是它没有焦点的时候:

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


我知道可能唯一的方法是继承控件来创建我自己的控件,问题是我不知道我需要对控件做什么,可能是更改setstyle属性,或者我不知道。

我认为您正在尝试解决一个不在应用程序范围内的问题。这不就是你正在使用的主题的问题吗

Windows有许多主题。仍然支持的主要主题是经典(XP之前)、Luna(XP)、Aero(Vista/Win7)和现代(Windows8)。所有这些都可以定制,以创建无限多的可能场景

大多数Windows窗体控件基于Win32控件,这些控件由操作系统根据这些系统主题绘制

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

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

创建用户无法更改的应用程序主题,或者用户必须从您创建的一组预先确定的主题中进行选择,这也被广泛接受。这方面的例子包括Google Chrome、iTunes、Winamp等。使用简单的Win32控件来实现这一点通常需要做大量的工作,除非您使用WPF之类的工具,这样做会更容易


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

我想这只是WM_NCPAINT的信息?@Sayse我读到了关于另一个SO问题的评论“截取WM_NCPAINT自己动手的日子早已一去不复返了,处理用户的视觉风格和玻璃偏好太复杂了”,总之,我不知道截取信息时我需要做什么。啊,对了,是的,这是有道理的,(对不起,我最近一直在用另一种语言工作,这是唯一的方法!)不管怎样,我认为这是非客户端区域的一部分,我只是不熟悉如何使用它似乎…@Mert-yep在使用默认windows主题的机器中,控件边框似乎“正常”“也许看起来很漂亮,但如果你使用的是第三方主题,那么请确保你将停止使用控件视觉样式,并像我一样更改边框颜色或禁用它,谢谢评论!不久前,我在一个继承的cbo上做了一些工作,这是一个PITA。它不像一个完整的控件,而是像文本框和按钮一样,像一个上下文菜单。您是否尝试过在
Leave
Enter
中摆弄背景色的5美分解决方案。问题是在使用其他方案的系统上选择颜色。顺便说一句,它看起来很奇怪,但更多的是配色方案的功能-仅使用深色不会导致这种情况。感谢您的回答,但这不是我要寻找的,我需要信息或示例从默认框架控件继承我的用户控件,仅用于禁用边框或更改颜色,我知道这可能是因为您可以看到许多从默认控件继承而来的用户控件没有边界。当我开发一个应用程序,如果我要共享它,我总是会放置一个主题选择器,一个主题使用Windows标准将所有控件颜色转换为使用控件的“defaultcolor”属性的结果,另一个主题为我的Windows主题使用漂亮的颜色。(抱歉,字符太多,我在这里跟随我的评论)这就是为什么我想禁用白色边框颜色或更改颜色使其与我的windows主题相匹配的原因,我不是问如何完全创建用户控件并完全自定义它,我知道这确实是一项艰巨的工作,我知道如何继承默认控件(如重载)或由我自己重写其方法的基础知识,我只需要知道如何使继承控件的边界看起来像我需要的那样。感谢您的评论对于组合框这样的控件,您不能覆盖某些功能。你可以自己画整个东西,也可以让操作系统来画。您无法选择。您可以设置操作系统可能侦听的唯一参数是在ComboBox及其祖先类上定义的参数。例如背景色、前景色、下拉样式、字体等。它不允许您连接到其绘制过程的不同参数,因为绘制过程对于每个Windows主题都不相同。