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)
请大家帮帮忙,在下感激不尽 展开
禁用水平滚动条的代码如下:
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)
请大家帮帮忙,在下感激不尽 展开
2个回答
展开全部
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没有区别
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完全一样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询