[原创].NET中Form.AutoScrollPosition的运用

.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 了!!

Published At
Categories with Web编程
Tagged with
comments powered by Disqus