none
C# 设置Listview的Columns标头颜色和高度(请MVP。。。。。) RRS feed

答案

  • 首先,需要设置ListView控件的OwnerDraw属性为true,这使得ListView控件在绘制控件时会引发绘制事件,而我们可以响应这些事件并按照我们的要求绘制出想要的效果。以下三个事件响应方法完成了对标题列的背景色的设置,而对项和子项的绘制则采用系统默认方式绘制,事件的名称可以从方法名称中看出来:
    private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    
    {
    
    	e.Graphics.FillRectangle(Brushes.Yellow, e.Bounds);	//采用特定颜色绘制标题列
    
    	e.DrawText();	//采用默认方式绘制标题文本
    
    }
    
    
    
    private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
    
    {
    
    	e.DrawDefault = true;	//采用系统默认方式绘制项
    
    }
    
    
    
    private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
    
    {
    
    	e.DrawDefault = true;	//采用系统默认方式绘制子项
    
    }
    对于如何设置标题高度,暂时还没有找到方法,等找到了会补充过来。



    理解的越多,需要记忆的就越少
    2009年5月18日 8:55
    版主

全部回复

  • 首先,需要设置ListView控件的OwnerDraw属性为true,这使得ListView控件在绘制控件时会引发绘制事件,而我们可以响应这些事件并按照我们的要求绘制出想要的效果。以下三个事件响应方法完成了对标题列的背景色的设置,而对项和子项的绘制则采用系统默认方式绘制,事件的名称可以从方法名称中看出来:
    private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    
    {
    
    	e.Graphics.FillRectangle(Brushes.Yellow, e.Bounds);	//采用特定颜色绘制标题列
    
    	e.DrawText();	//采用默认方式绘制标题文本
    
    }
    
    
    
    private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
    
    {
    
    	e.DrawDefault = true;	//采用系统默认方式绘制项
    
    }
    
    
    
    private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
    
    {
    
    	e.DrawDefault = true;	//采用系统默认方式绘制子项
    
    }
    对于如何设置标题高度,暂时还没有找到方法,等找到了会补充过来。



    理解的越多,需要记忆的就越少
    2009年5月18日 8:55
    版主
  • 高度还的麻烦大家了
    谢谢C#版主

    2009年5月18日 9:04
  • 你好!
         可以使用DrawColumnHeader事件自己画,注意仅当 OwnerDraw 属性设置为 true View 属性设置为 View. Details 时才引发此事件。此事件可以针对控件中的每个列标题发生
    周雪峰
    2009年5月18日 9:07
    版主
  • 能详细一点么
    谢谢了
    2009年5月18日 9:22
  • RickyLin的回答太及时了啊!也很详细啊!
    支持一下啊!
    我晚了一步!不过只要问题解决了,大家都得到了提高,这比什么都重要啊!
    周雪峰
    2009年5月18日 9:25
    版主
  • 版主帮我解决了颜色
    还有高度呢
    2009年5月18日 9:28
  • 也需要像上面那样自己画的,而且一旦改变了,其他的也都要重画,比较烦琐啊!
    请问你为什么一定要改变列头的高度呢?

    周雪峰
    2009年5月18日 9:41
    版主
  • 简单
    高度不够
    美观
    谢谢
    2009年5月18日 9:59
  • 你好,

    我没有看到什么好方法改变ListView标题的高度.你可以用Datagridview去代替ListView控件,设置Datagridview的标题的高度作为一种替代方法.

    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年5月20日 4:10
    版主
  • 的确,ListView控件封装的是Windows里的控件,如果控件本身不提供给你这种能力,你试图去调整很困难,我尝试使用Windows API的SendMessage方法发送消息得到ListView的标题窗口句柄,然后使用SetWindowPos放大成功了设置了标题的高度,但是高度设高之后遮住了下面的明细内容,所以还是没有解决。网上说将标题字体设置大一些可以把标题高度顶高,但是我想那不是你想要的结果。我也没有试验出来。



    理解的越多,需要记忆的就越少
    2009年5月20日 11:39
    版主
  • 谢谢大家
    我们要做的东西和listView差不多
    但是列标头颜色和宽度不同
    表格还的有颜色
    有没有自定义控件
    我试了一下
    但是没做出来
    大家谁要是能做出来
    请帮帮忙
    谢谢了

    2009年5月22日 3:46
  • 有一个比较笨的办法,但是不妨试试看,看是否合你的意
    在 gridview 所在的窗体中加入一个 imagelist
    并设置 gridview 的 smallimagelist 为该 imagelist
    然后通过调整 imagelist 的 imagesize就能撑起行高
    imagelist 的Size 可以设置为 new Size(1,20)
    2009年9月23日 17:19