C# 如何控制ListBox滚动条的滚动。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 如何控制ListBox滚动条的滚动。相关的知识,希望对你有一定的参考价值。

RT。假如我有一个ListBox,我想通过一个方法直接把ListBox的滚动条移动到任意位置。我知道可以通过win32Api做到,但是很麻烦,有没有比较简单的方法。如果是在网上搜索的长篇大论代的码或是一大堆英文就算了,我看过了。我需要managed code就可以解决的。有注释更好。

详细步骤:

1在项目中添加新项--用户控件,我们命名为CustomScrollbar.cs

2.准备几张图片添加进项目资源作为滚动条重绘时要用的背景,我用的图片如下:

uparrow.png资源名称为uparrow   ,滚动条的上箭头ThumbBottom.png资源名称为ThumbBottom  ,滚动条中间滑道的背景

ThumbMiddle.png资源名称为ThumbMiddle  ,滚动条的中间的拖动块

downarrow.png资源名称为downarrow   ,滚动条的下箭头

3.然后就是利用上面图片做背景重画滚动条背景了,直接给出CustomScrollbar.cs的代码:

Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.Diagnostics;
namespace Winamp

    [Designer(typeof(ScrollbarControlDesigner))]
    public partial class CustomScrollbar : UserControl
    
  protected Color moChannelColor = Color.Empty;
        protected Image moUpArrowImage = null;//上箭头
        //protected Image moUpArrowImage_Over = null;
        //protected Image moUpArrowImage_Down = null;
        protected Image moDownArrowImage = null;//下箭头
        //protected Image moDownArrowImage_Over = null;
        //protected Image moDownArrowImage_Down = null;
        protected Image moThumbArrowImage = null;
  protected Image moThumbTopImage = null;
        protected Image moThumbTopSpanImage = null;
        protected Image moThumbBottomImage = null;
        protected Image moThumbBottomSpanImage = null;
        protected Image moThumbMiddleImage = null;
  protected int moLargeChange = 10;
        protected int moSmallChange = 1;
        protected int moMinimum = 0;
        protected int moMaximum = 100;
        protected int moValue = 0;
        private int nClickPoint;
  protected int moThumbTop = 0;
  protected bool moAutoSize = false;
  private bool moThumbDown = false;
        private bool moThumbDragging = false;
  public new event EventHandler Scroll = null;
        public event EventHandler ValueChanged = null;
  private int GetThumbHeight()
        
            int nTrackHeight = (this.Height - (UpArrowImage.Height + DownArrowImage.Height));
            float fThumbHeight = ((float)LargeChange / (float)Maximum) * nTrackHeight;
            int nThumbHeight = (int)fThumbHeight;
  if (nThumbHeight > nTrackHeight)
            
                nThumbHeight = nTrackHeight;
                fThumbHeight = nTrackHeight;
            
            if (nThumbHeight < 56)
            
                nThumbHeight = 56;
                fThumbHeight = 56;
            
 

参考技术A 我觉得你需要的不是移动到任意位置,而是带有你需要的记录的位置吧,如果你只是想要通过滚动显示出某条你需要显示的记录,那么里面有属性selectindex,将它设置为你需要的数字就可以显示这个index的记录了,如果你需要让你的记录显示到中间位置,那么就计算一些哦,然后多做几步操作,先将你要的记录的下一半的listbox选中,然后再选中你要的记录,这样就完成了你需要的滚动。
不明白可以一起讨论哦
参考技术B this.listBox1.TopIndex = this.listBox1.Items.Count - (int)(this.listBox1.Height / this.listBox1.ItemHeight);

请问:C# listView控件如何判断滚动条的位置?判断滚动条在控件的最下面?

如果您要做到这个事情.您可能需要自己封装对应的控件.
如果按照您的需求来说.
具体的过程(C/S)
首先拖出一个LISTVIEW 将滚动条不显示
拖出滚动条控件
使用代码将其关联起来.
当拖动时记录当前位置.得到结果
参考技术A 我已经找到解决方法了,分享给你,
使用scrollablecontrol类型的AutoScrollPosition属性就可以知道当前的位置了,追问

请问:能具体点吗?我判断AutoScrollPosition属性的X、Y值不行呀

参考技术B 滚动条是自动控制的,无需我们关心。 参考技术C 不能在滚动条拖动事件里把两个滚动条纵向的值设置成一样吗?不知道行不行,一个建议而已

以上是关于C# 如何控制ListBox滚动条的滚动。的主要内容,如果未能解决你的问题,请参考以下文章

请问:C# listView控件如何判断滚动条的位置?判断滚动条在控件的最下面?

使用带有滚动条的任何控件时不会触发 MouseWheel 事件(在 C# Windows 窗体中)

vb中ListBox怎么加左右滚动条ScrollBar

C# Winform 滚动条的问题

Javascript如何控制Div的滚动条的位置?

Windows窗体 - 如何获取列表框的垂直滚动条?