c# 重绘事件 关于OnPaint事件

我在OnPaint事件里面改变了滚动条和列表框的样式,但是在按下鼠标左键后又会显示系统样式,请问我该用什么方法才能改变鼠标按下后的样式?... 我在OnPaint事件里面改变了滚动条和列表框的样式,但是在按下鼠标左键后又会显示系统样式,请问我该用什么方法才能改变鼠标按下后的样式? 展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
然后去远足
2015-05-11 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2403万
展开全部
问题说清楚,哪个控件的 OnPaint 事件?继承重写的还是单纯的事件绑定?
更多追问追答
追问
checkedlistbox和listview  重写
追答
Winform 这两个控件(或者说几乎所有带滚动条的控件)都比较蛋疼,滚动条的绘制其实是由系统完成的而不是 OnPaint 事件完成的,OnPaint 事件实际上只能重绘控件的非滚动条的部分。这个时候如果有滚动条话还是被系统自己绘制了的,只不过被你重绘的部分“挡住”了而已。

但如果出现鼠标点击事件,就有点儿麻烦了,因为这个时候系统是先处理滚动条这个需要被重绘的部分的,导致系统绘制的这部分又把你重绘的部分“挡住”了。

说的有点儿乱,不知道题主理解没有。

所以这几个带滚动条的控件要想重绘滚动条,有两种方式。一是重绘 HScrollBar 或 VScroolBar 这两个控件(或者干脆自己写一个滚动条控件),然后屏蔽掉原本控件的滚动条,让 HScrollBar、VScroolBar 跟你的控件联动。二是重写控件接管其消息处理函数(也就是重写 WndProc 方法),拦截掉系统发出的重绘滚动条的消息,改成显示自己要的样式。

两者说到底吧,都是一个比一个麻烦(题主可以搜到很多 VC++ 关于这个蛋疼的滚动条重绘的方法的,都是拦截系统消息,C# 的资料较少)。这有一篇资料是用的第一种方法:http://www.csharpwin.com/csharpspace/3633r5162.shtml。相比较而言还是 WPF 重绘轻松加愉快啊……

至于题主说的列表框的样式也显示成系统样式我就不太清楚了,请贴关键代码。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式