控制带有滚动条的控件(ListView,TreeView等)的滚动条显示
2011-10-21 09:56
211 查看
这是一个小小的组件,实现控制带有滚动条的控件(ListView,TreeView等)的滚动条显示。
带有滚动条的控件,通常情况下都是需要显示滚动条的时候,如果水平滚动条和垂直滚动条都需要显示,就一起显示出来。但是有的时候我们只想让其只显示一条滚动条,例如只显示垂直滚动条,我们应该怎么办呢?
下面是一种可选方案:
/// <summary>
/// 作者:Starts_2000
/// 日期:2009-07-14
/// 网站:http://www.csharpwin.com CS 程序员之窗。
/// 你可以免费使用或修改以下代码,但请保留以上版权信息。
/// 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html)。
/// 功能:控制有滚动条的控件的滚动条是否显示。
/// </summary>
public class ScrollBarManager : NativeWindow, IDisposable
{
private Control _owner;
private SB _scrollBar;
private const int GWL_STYLE = -16;
private const int WS_HSCROLL = 0x00100000;
private const int WS_VSCROLL = 0x00200000;
public ScrollBarManager(Control owner, SB scrollBar)
{
if (owner == null)
{
throw new ArgumentNullException("owner");
}
base.AssignHandle(owner.Handle);
_owner = owner;
_scrollBar = scrollBar;
}
[DllImport("user32.dll")]
private static extern int ShowScrollBar(IntPtr hWnd, int iBar, int bShow);
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int nIndex);
protected override void WndProc(ref Message m)
{
HideScrollBar(ref m);
base.WndProc(ref m);
}
private void HideScrollBar(ref Message m)
{
int dwStyle = GetWindowLong(base.Handle, GWL_STYLE);
switch (_scrollBar)
{
case SB.SB_HORZ:
if ((dwStyle & WS_HSCROLL) == WS_HSCROLL)
{
ShowScrollBar(base.Handle, (int)_scrollBar, 0);
}
break;
case SB.SB_VERT:
if ((dwStyle & WS_VSCROLL) == WS_VSCROLL)
{
ShowScrollBar(base.Handle, (int)_scrollBar, 0);
}
break;
}
}
#region IDisposable 成员
public void Dispose()
{
base.ReleaseHandle();
_owner = null;
}
#endregion
}
/// <summary>
/// 作者:Starts_2000
/// 日期:2009-07-14
/// 网站:http://www.csharpwin.com CS 程序员之窗。
/// 你可以免费使用或修改以下代码,但请保留以上版权信息。
/// 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html)。
/// </summary>
public enum SB
{
/// <summary>
/// 水平滚动条。
/// </summary>
SB_HORZ = 0,
/// <summary>
/// 垂直滚动条。
/// </summary>
SB_VERT = 1,
}
源及源码下载地址:http://eran.555ip.com/Information/0/330/
带有滚动条的控件,通常情况下都是需要显示滚动条的时候,如果水平滚动条和垂直滚动条都需要显示,就一起显示出来。但是有的时候我们只想让其只显示一条滚动条,例如只显示垂直滚动条,我们应该怎么办呢?
下面是一种可选方案:
/// <summary>
/// 作者:Starts_2000
/// 日期:2009-07-14
/// 网站:http://www.csharpwin.com CS 程序员之窗。
/// 你可以免费使用或修改以下代码,但请保留以上版权信息。
/// 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html)。
/// 功能:控制有滚动条的控件的滚动条是否显示。
/// </summary>
public class ScrollBarManager : NativeWindow, IDisposable
{
private Control _owner;
private SB _scrollBar;
private const int GWL_STYLE = -16;
private const int WS_HSCROLL = 0x00100000;
private const int WS_VSCROLL = 0x00200000;
public ScrollBarManager(Control owner, SB scrollBar)
{
if (owner == null)
{
throw new ArgumentNullException("owner");
}
base.AssignHandle(owner.Handle);
_owner = owner;
_scrollBar = scrollBar;
}
[DllImport("user32.dll")]
private static extern int ShowScrollBar(IntPtr hWnd, int iBar, int bShow);
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int nIndex);
protected override void WndProc(ref Message m)
{
HideScrollBar(ref m);
base.WndProc(ref m);
}
private void HideScrollBar(ref Message m)
{
int dwStyle = GetWindowLong(base.Handle, GWL_STYLE);
switch (_scrollBar)
{
case SB.SB_HORZ:
if ((dwStyle & WS_HSCROLL) == WS_HSCROLL)
{
ShowScrollBar(base.Handle, (int)_scrollBar, 0);
}
break;
case SB.SB_VERT:
if ((dwStyle & WS_VSCROLL) == WS_VSCROLL)
{
ShowScrollBar(base.Handle, (int)_scrollBar, 0);
}
break;
}
}
#region IDisposable 成员
public void Dispose()
{
base.ReleaseHandle();
_owner = null;
}
#endregion
}
/// <summary>
/// 作者:Starts_2000
/// 日期:2009-07-14
/// 网站:http://www.csharpwin.com CS 程序员之窗。
/// 你可以免费使用或修改以下代码,但请保留以上版权信息。
/// 具体请查看 CS程序员之窗开源协议(http://www.csharpwin.com/csol.html)。
/// </summary>
public enum SB
{
/// <summary>
/// 水平滚动条。
/// </summary>
SB_HORZ = 0,
/// <summary>
/// 垂直滚动条。
/// </summary>
SB_VERT = 1,
}
源及源码下载地址:http://eran.555ip.com/Information/0/330/
相关文章推荐
- 控制带有滚动条的控件(ListView,TreeView等)的滚动条显示
- 控制带有滚动条的控件(ListView,TreeView等)的滚动条显示
- ListView控件显示 图片加文字说明 并且可以对滚动条进行控制
- 【学习】ListView中控制子控件的隐藏和显示
- WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条)
- 使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面 [无限级treeview]
- C#调用P/Invoke显示、隐藏和移动ListView 控件中的滚动条
- 如何隐藏TreeView,ListView等带有标准滚动条窗体的滚动条
- 使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面
- 控制ListView(RecyclerView)中Adapter中的控件的显示和隐藏
- C#TreeView控件如何控制滚动条的位置
- 【Android开发学习28】界面控件之列表控件(ListView)--显示字符数组
- c# winform项目treeview控件绑定本地电脑磁盘信息,读取文件夹信息,显示文件夹内文件内容
- 使用ASP.NET2.0的TreeView控件显示分层数据
- 安卓ListView控件显示
- Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
- Android 控件重复初始化影响隐藏和显示的控制
- ListView-更改控件显示样式
- 12-界面控件之listView使用java代码和xml文件不同方式实现列表显示
- 线性布局控制控件居右显示