.NET 中 Form. AutoScrollPosition 的运用
作者:袁晓辉
今天拿 C# 写了一个支持滚动的图片显示程序( WinForm 程序),主要运用 Form 的 AutoScroll ,代码很简单,关键代码如下:
///
1<summary>
2
3/// Form 的 Load 事件
4
5/// </summary>
///
1<param name="sender"/>
///
1<param name="e"/>
private void Form1_Load( object sender, System.EventArgs e)
{
// 这个很关键,只有该属性为 true 时,窗口才会在控件超出窗口范围时
// 自动添加滚动条,并在我们操作滚动条时,自动滚动控件
this .AutoScroll = true ;
}
///
1<summary>
2
3/// 设置一个图片文件到 pictureBox1 上
4
5/// </summary>
///
1<param name="filename"/>
图片文件名
private void SetImage( string filename)
{
Bitmap bm = new Bitmap(filename);
pictureBox1.BackgroundImage = bm;
GraphicsUnit bmGU = GraphicsUnit.Pixel;
RectangleF rectF = bm.GetBounds( ref bmGU);
// 设置 pictureBox1 的大小和位置。如果该控件超出 Form 的范围, Form 会自动
// 添加滚动条
pictureBox1.SetBounds(0, 0, ( int )rectF.Width, ( int )rectF.Height);
}
///
1<summary>
2
3/// pictureBox1 的 DobuleClick 事件
4
5/// </summary>
///
1<param name="sender"/>
///
1<param name="e"/>
private void pictureBox1_DoubleClick( object sender, System.EventArgs e)
{
// 打开一个文件对话框选择图片文件
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image Files|.bmp;.jpg;.jpeg;*.gif";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 设置要显示的图片
SetImage(openFileDialog.FileName);
}
}
运行一下,似乎很正常,双击 pictureBox1 ,打开一个图片文件,如果图片尺寸过大,会自动出现滚动条。只是有一种情况,先打开一个大图片,然后 拖动滚动条到最后 ,然后再打开一图片,图片显示的位置就出错了(不是显示在左上角)。奇怪了,我明明设置了 pictureBox1 的 X Y 为 0 了啊: pictureBox1.SetBounds(0, 0, …… ) 真是很费解 !! ** **
经过艰苦地攻读 Framework 帮助文件,终于找出原因,现在和大家分享: 原来当我们改变了窗口的滚动条的位置后,窗口客户区的坐标原点就发生了变化,和原来的坐标原点的偏移量可以用 Form. AutoScrollPosition 表示 。
既然问题找到了,解决就很简单,修改 SetImage 函数的最后一句代码为:
pictureBox1.SetBounds(AutoScrollPosition.X, AutoScrollPosition.Y, ( int )rectF.Width, ( int )rectF.Height);
就一切 OK 了!!