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

Sre*_*r P 5 .net c# listview scrollbar winforms

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

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

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

Cod*_*ray 15

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

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

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

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

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

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

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

  • 作为一名计算机程序员,经过 19 年的现场经验,我完全同意开发人员应该尊重用户自己的偏好,即使是应用程序的核心功能以及主题选项。然而,Windows(甚至10)带有一个非常坚固且(可以说)丑陋(至少非现代)的主题,并且很少有用户更改(甚至知道如何更改)它们。所以我想最好的解决方法是在用户想要更改它们时给他们一个机会。我为列表视图列标题做到了这一点,但现在我正在为滚动条而烦恼...... (2认同)