请教各位在C#中vScrollBar的用法是怎样的呢???
具体的问题是想在picturebox中通过vScrollBar这个控件来拉动一张一张的显示图片,希望会的人能给出最理想的答案,谢谢!!!!!
0、在界面上放一个PictureBox控件,在主窗体代码中将保存图片路径的字符串集合保存到PictureBox控件的Tag属性中;
1、新建一个类叫做VScrollBarForPictureBox,并使之继承自VScrollBar控件,生成,在主界面上放一个VScrollBarForPictureBox控件;
2、既然要将所有功能都包装进去,那么这个类中就要有完成功能所需的所有东西才行,需要什么东西呢?根据你的描述“在picturebox中通过vScrollBar这个控件来拉动一张一张的显示图片”来看,显然需要的是PictureBox和“图片”,前面我们已经将保存图片路径的集合赋予了PictureBox的Tag属性,那么显然只要类获取了PictureBox就都有了,所以,写一个字段_pb用来保存PictureBox,写一个List<string>类型的字段_imagesPath来保存图片路径集合,再写一个只写公共属性PictureContainer供外部代码为类设置PictureBox,属性代码中,我们保存PictureBox并将图片路径集合从PictureBox的Tag属性中取出并保存到_imagesPath字段,然后根据_imagesPath集合中值的数量来设置自身的Maximum属性以使滚动时的值不超出图片的数量;
3、将VScrollBarForPictureBox控件的LargeChange属性的值设置为1,这样,配合Maximum属性的值,VScrollBar滚动时的值就与图片路径集合的索引对应起来了;
4、重写OnScroll方法以便在滚动时获取滚动到的地方对应的图片索引值,从路径集合取出路径然后从磁盘生成Image显示在PicutreBox中就可以了;
5、重写Refresh方法,当图片路径集合变动后,应调用此方法以便重新计算Maximum的值以反映变化;
6、代码如下:
程序代码:
//VScrollBarForPictureBox.cs
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace VScrollForImage
{
public class VScrollBarForPictureBox : VScrollBar
{
#region 全局字段
private List<string> _imagesPath;
private PictureBox _pb;
#endregion
#region 公共属性
public PictureBox PictureContainer
{
set
{
_pb = value;
if (_pb.Tag == null)
return;
_imagesPath = (List<string>) _pb.Tag;
Maximum = _imagesPath.Count - 1;
}
}
#endregion
#region 重写方法
protected override void OnScroll(ScrollEventArgs se)
{
base.OnScroll(se);
if (_imagesPath == null) return;
_pb.Image = Image.FromFile(_imagesPath[se.NewValue]);
}
public override void Refresh()
{
base.Refresh();
if (_imagesPath == null) return;
Maximum = _imagesPath.Count - 1;
}
#endregion
}
}
//FormMain.cs
using System.Collections.Generic;
using System.Windows.Forms;
namespace VScrollForImage
{
public partial class FormMain : Form
{
#region 构造函数
public FormMain()
{
InitializeComponent();
Pb.Tag = new List<string> { "0.jpg", "1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg" };
Vsb.PictureContainer = Pb;
}
#endregion
}
}
[ 本帖最后由 mmxo 于 2012-12-27 23:14 编辑 ]










谢谢详尽的讲解,这个看起来很困难的样子,不过还是切努力的理解吧!!!!!总之谢谢你帮我解决了一个大问题!!!!