首页 > 开发 > .Net > 正文

.NET中Form.AutoScrollPosition的运用

2020-02-03 16:01:29
字体:
来源:转载
供稿:网友
今天拿c#写了一个支持滚动的图片显示程序(winform程序),主要运用form的autoscroll,代码很简单,关键代码如下:/// <summary>/// form的load事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void form1_load(object sender, system.eventargs e){   //这个很关键,只有该属性为true时,窗口才会在控件超出窗口范围时    //自动添加滚动条,并在我们操作滚动条时,自动滚动控件    this.autoscroll = true;}/// <summary>/// 设置一个图片文件到picturebox1上/// </summary>/// <param name="filename">图片文件名</param>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);}/// <summary>/// picturebox1的dobuleclick事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>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了!!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表