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

RT。假如我有一个ListBox,我想通过一个方法直接把ListBox的滚动条移动到任意位置。我知道可以通过win32Api做到,但是很麻烦,有没有比较简单的方法。如果是... RT。假如我有一个ListBox,我想通过一个方法直接把ListBox的滚动条移动到任意位置。我知道可以通过win32Api做到,但是很麻烦,有没有比较简单的方法。如果是在网上搜索的长篇大论代的码或是一大堆英文就算了,我看过了。我需要managed code就可以解决的。有注释更好。 展开
 我来答
du瓶邪
推荐于2016-09-25 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2845万
展开全部

详细步骤:

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;
            }
 
iaskall
2012-02-22 · TA获得超过630个赞
知道小有建树答主
回答量:568
采纳率:83%
帮助的人:235万
展开全部
我觉得你需要的不是移动到任意位置,而是带有你需要的记录的位置吧,如果你只是想要通过滚动显示出某条你需要显示的记录,那么里面有属性selectindex,将它设置为你需要的数字就可以显示这个index的记录了,如果你需要让你的记录显示到中间位置,那么就计算一些哦,然后多做几步操作,先将你要的记录的下一半的listbox选中,然后再选中你要的记录,这样就完成了你需要的滚动。
不明白可以一起讨论哦
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wqvbqjq
2013-05-21
知道答主
回答量:7
采纳率:0%
帮助的人:1.1万
展开全部
this.listBox1.TopIndex = this.listBox1.Items.Count - (int)(this.listBox1.Height / this.listBox1.ItemHeight);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式