C# listview空间去除水平滚动条的问题

listview的view处于details模式我用listview控件,禁用了水平滚动条,出现了个问题:垂直滚动条不管内容多少都只能滚动固定的大小,内容太多就无法显示完... listview的view处于details模式我用listview控件,禁用了水平滚动条,出现了个问题:垂直滚动条不管内容多少都只能滚动固定的大小,内容太多就无法显示完全了。
禁用水平滚动条的代码如下:
private const int SB_HORZ = 0;//水平滚动条
private const int SB_VERT = 1; //垂直滚动条
[DllImport("user32.dll")]
public static extern int ShowScrollBar(int hwnd, int wBar, int bShow);
在form_load窗体加载时调用
this.listView1.Scrollable = false;
ShowScrollBar((int)this.listView1.Handle, SB_VERT, 1)
请大家帮帮忙,在下感激不尽
展开
 我来答
百度网友94f02eb
2013-04-01 · TA获得超过8612个赞
知道大有可为答主
回答量:7955
采纳率:74%
帮助的人:4392万
展开全部
ListView 控件,有些特性,不像listbox 那么单纯,呵呵。

ListView 在点击控件的时候,也会发生重绘事件,所以,去除listView的横向滚动条,通过外部的API消息,很难完善,即使去掉了,那么竖向的滚动条,在自绘的时候,不能判定内容的高度,就会出差偏差了。

解决这个问题,需要自己扩展ListView,重写这个控件的消息处理函数
-------------------------------------------------------------------------------------------
在你的项目里,添加一个 “类”,名字叫 ListViewEx

类的代码,改写成如下:
using System.Windows.Forms;

public class ListViewEx : ListView
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int ShowScrollBar(IntPtr hWnd, int iBar, int bShow);
const int SB_HORZ = 0;
const int SB_VERT = 1;
protected override void WndProc(ref Message m)
{
if (this.View == View.List || this.View == View.Details)
{
ShowScrollBar(this.Handle, SB_HORZ, 0);
}
base.WndProc(ref m);
}
}

保存后,重新编译你的项目。

然后,在工具箱里,可以直接拖动这个 ListViewEx 使用了,使用上和 ListView没有区别
更多追问追答
追问
出现两个问题:1、 this.listViewEx1 = new MiniMusicPlayer.ListViewEx();有这么一句报错,说不存在类型名称ListViewEx。 2、该写成this.listViewEx1 = new ListViewEx();后没报错,但运行后在这个listview中添加的数据无法显示,添加数据时滚动条到是能判断内容多少  ,麻烦再帮帮忙
追答
ListViewEx 添加后,先不要做任何引用,直接编译你的项目,编译后,ListViewEx 就像 ListView一样,会在工具箱中出现,这时,你只要拖动一个ListViewEx 到 Form 界面上,就可以用了,和 ListView完全一样。
刀锋猛将
2013-03-31
知道答主
回答量:7
采纳率:0%
帮助的人:7530
展开全部
没太明白你的意思,是不是想换行?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式