首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于ListView美化有关问题.

2012-06-20 
关于ListView美化问题...需求,无法上图抱歉只能描述了:winform ListView ,公司需要风格好看,但是我找不到

关于ListView美化问题...
需求,无法上图抱歉只能描述了:
winform ListView ,公司需要风格好看,但是我找不到网上现成第三方的,所以只能自己重绘,但是遇到一些问题;
首先要是有朋友能提供现成的控件下载,我就不用再重绘了;
重绘中具体遇到的问题:
我需要 ColumnHeader,自定义的背景线条等,已经实现但是我发现,假如我的ListView.Width有300px;假如我的ColumnHeader合起来不足300px那么,表头哪一行除了ColumnHeader以外会是默认的白色...
我有两个思路...
1,能直接把那白色重绘成我想要的样子,但是我找完了ListView的事件与方法都没找到....
2, 将所有的ColumnHeader总宽度固定为ListView的Width(我就是在这么做),但是这么做一旦用户拖动ColumnHeader宽度也是不行的,于是我用了OnColumnWidthChanging,想实现的效果,如果拖动的是最后一列,就不改变;否则假如拖动的是某列,就让它后面那列也改变Width,但是这样的话,假如我移动第一列,第二列的宽度会先变,然后变第一列,所以一直抖动,
于是我在代码里手动先改变第一列的width,并且取消这次改变,结果....无限触发OnColumnWidthChanging
代码如下:

C# code
        int changeId=-1;        protected override void OnColumnWidthChanging(ColumnWidthChangingEventArgs e)        {            if (changeId == -1 || e.ColumnIndex == changeId)            {                //如果是最后一列,禁止拖动                if (this.Columns[e.ColumnIndex].DisplayIndex == this.Columns.Count - 1)                {                    e.NewWidth = this.Columns[e.ColumnIndex].Width;                    e.Cancel = true;                }                else                {                    changeId = e.ColumnIndex;                    //this.Columns[e.ColumnIndex].Width = e.NewWidth;                    //e.NewWidth = this.Columns[e.ColumnIndex].Width;                    //e.Cancel = true;                    this.Columns[e.ColumnIndex + 1].Width -= (e.NewWidth - this.Columns[e.ColumnIndex].Width);                }            }            base.OnColumnWidthChanging(e);        }        protected override void OnColumnWidthChanged(ColumnWidthChangedEventArgs e)        {            if (e.ColumnIndex == changeId)            {                changeId = -1;            }            base.OnColumnWidthChanged(e);        }

哪位对这些了解的大哥,帮帮忙吧,不一定要用重绘就算是第三方控件都没关系,我实在被搞惨了,下周就要搞定界面开始逻辑编码了,我界面做了一周了。。。。

[解决办法]
你要不要试试列头放在 ListView 外面,用别的组合控件来显示

热点排行