请教各位在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 编辑 ]