c# – 在WinForms中更改ListView中滚动条的颜色

是否可以更改ListView控件中滚动条的颜色.它是一个Windows应用程序.

请让我知道我可以使用哪些属性或代码来执行此操作.

有人可以帮助你如何将主题应用于winforms(整个到我的应用程序)
如在yahoo messenger / digby等

简短的回答:不,这是不可能的.

更长(更准确)的答案:

不幸的是,这远不如设置属性那么简单.原因是ListView控件使用的滚动条不是实际的滚动条控件.它们没有自己的窗口句柄,它们的绘图由ListView控件完全内部管理.当然,WinForms中的ListView控件只是Win32 API提供的同一控件的一个薄包装.它们都没有暴露任何改变滚动条颜色的工具.

但情节变浓了.我说ListView控件(注意这也适用于TreeView)处理绘制滚动条本身,这应该表明你不能简单地处理它的Paint事件并像许多其他WinForms控件一样自己绘制它们. Paint事件对应于窗口消息WM_PAINT,但是当需要绘制非客户区域时,还有另一条消息(WM_NCPAINT)被发送到窗口.理所当然地,当收到WM_NCPAINT消息时,滚动条被绘制,因为我已经说过它们是ListView控件框架的一部分.但他们不是.

然后就是毫无意义的过度定制问题.我非常支持那些尊重用户当前主题设置的应用程序.如果我将Windows配置为使用高对比度主题(或者如果我不能忍受蓝色,那么我有一个绿色主题),我希望我的计算机上的应用程序使用该主题绘制他们的UI元素.无论你设计的滚动条看起来像什么,无论它在你的计算机上看起来多么棒,它都可以保证在某人的计算机上看起来像垃圾.如果那个人是你的用户之一,那就是oops.少数使用自定义主题的应用程序会进行大量测试,但仍然无法避免遇到问题.

你可能能够以某种方式钩住滚动条本身,但这很可能是不可能的,因为它们部分在内核模式下实现.事实上,我听说WindowBlinds的作者声称挂钩滚动条是他们不得不做的最困难的事情.他们肯定不会分享他们的任何技巧.

唯一真正看起来有希望的是詹姆斯布朗的Custom Scrollbar Library,但它是用C语言编写的.你可以自己移植到C#.像往常一样,这种事情不会没有它的问题.阅读评论显示了不少有各种问题的人.如果您不太了解Win32 API,那么您可能无法修复可能会在应用程序中引入的任何错误.

谷歌搜索这个主题几乎完全揭示了未回答的问题.对于它的价值,这在WPF中更容易.

https://stackoverflow.com/questions/4397025/changing-color-of-scroll-bar-in-listview-in-winforms

转载注明原文:c# – 在WinForms中更改ListView中滚动条的颜色