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

2024-12-21 21:00:29
推荐回答(3个)
回答1:

详细步骤:

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;
            }
 

回答2:

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

回答3:

this.listBox1.TopIndex = this.listBox1.Items.Count - (int)(this.listBox1.Height / this.listBox1.ItemHeight);