Panel控件自动显示滚动条的问题

wwwafa9 2010-12-17 02:35:54
我现在想做一个图片查看器,象WinXP自带的“Windows 图片和传真查看器”。
可是用Panel和PictureBox两个控件来做,遇到了一些问题。操作步骤如下:

(前提条件:把Panel的AutoScroll属性的值设为true,以便自动出现滚动条)
1、打开该窗口时,PictrueBox控件的SizeMode设为Zoom,以便图片自动适应图片框控件(我们的图片都是很大的),这时没有滚动条;
2、点击【实际大小】按钮,要显示图片的实际大小,PictureBox控件的SizeMode设为AutoSize,这时Panel会出现滚动条;
3、点击【最合适】按钮,把PictureBox控件的SizeMode设为Zoom,想得到的效果和步骤1一样,可是,Panel控件的滚动条就是不消失,
不知道怎么搞得?Panel控件的DisplayRectangle属性是只读的,改变后恢复不了初始值了。

请各位朋友帮帮忙!非常感谢!
...全文
815 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwafa9 2010-12-20
  • 打赏
  • 举报
回复
兄弟们都来支持一下。
wwwafa9 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 k304475243 的回复:]

ding~~
[/Quote]

谢谢支持!
wwwafa9 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qqamoon 的回复:]

当"最合适"时,你是否将 PictureBox.Margin 计算在内了呢?
[/Quote]

PictureBox.Margin都设为0了。
龍过鸡年 2010-12-20
  • 打赏
  • 举报
回复
当"最合适"时,你是否将 PictureBox.Margin 计算在内了呢?
潇洒王子 2010-12-20
  • 打赏
  • 举报
回复
需要支持
thisiscandy 2010-12-19
  • 打赏
  • 举报
回复
marking.
高啊市勇哥 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wwwafa9 的回复:]

引用 5 楼 dkhui 的回复:

DisplayRectangle 这个属性 我还真不明白他是干什么的,不过只读的属性是不能做更改的。


看MSDN上的说明,就是虚拟显示区域。

因为Panel要包含比它大的图像,所以它就要占用更多的显示空间,但是我们设置的显示空间它不会更改(首先要启用AutoScroll功能)。

这个问题很麻烦。
[/Quote]


我测试了一下 当我移动滚动条的时候

DisplayRectangle.Height;
DisplayRectangle.Width;

这个两个属性跟着变化,那么就是说这两个属性决定他显示的区域,那么开始之前先记录一下这两个属性的值
那么当你想要他恢复初始值的时候在把记录好的值赋给他就行了!

我模拟的你要求做了一下测试 貌似DisplayRectangle没有什么影响
wwwafa9 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xingyuebuyu 的回复:]

panel1.HorizontalScroll.Visible = false;//横的
panel1.VerticalScroll.Visible = false;//竖的
[/Quote]

谢谢!

但是加了“平移”功能后又不行了。真是伤脑筋啊!
wwwafa9 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dkhui 的回复:]

引用 6 楼 wwwafa9 的回复:

引用 5 楼 dkhui 的回复:

DisplayRectangle 这个属性 我还真不明白他是干什么的,不过只读的属性是不能做更改的。


看MSDN上的说明,就是虚拟显示区域。

因为Panel要包含比它大的图像,所以它就要占用更多的显示空间,但是我们设置的显示空间它不会更改(首先要启用AutoScroll功能)。

这个问……
[/Quote]

都说是只读的了,不能修改。

把代码发上来看看,你是怎么做的?
xingyuebuyu 2010-12-17
  • 打赏
  • 举报
回复
panel1.HorizontalScroll.Visible = false;//横的
panel1.VerticalScroll.Visible = false;//竖的
wwwafa9 2010-12-17
  • 打赏
  • 举报
回复
各位高手都去哪里了???
wwwafa9 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dkhui 的回复:]

DisplayRectangle 这个属性 我还真不明白他是干什么的,不过只读的属性是不能做更改的。
[/Quote]

看MSDN上的说明,就是虚拟显示区域。

因为Panel要包含比它大的图像,所以它就要占用更多的显示空间,但是我们设置的显示空间它不会更改(首先要启用AutoScroll功能)。

这个问题很麻烦。
高啊市勇哥 2010-12-17
  • 打赏
  • 举报
回复
DisplayRectangle 这个属性 我还真不明白他是干什么的,不过只读的属性是不能做更改的。
wwwafa9 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dkhui 的回复:]

if (pictureBox1.SizeMode == PictureBoxSizeMode.Zoom)
{
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
panel1.AutoScroll = true;
}
……
[/Quote]

谢谢回复。

但是Panel控件的DisplayRectangle属性的值还是没有恢复到初始值。
龍过鸡年 2010-12-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/qqamoon/archive/2010/12/16/6079697.aspx
高啊市勇哥 2010-12-17
  • 打赏
  • 举报
回复
if (pictureBox1.SizeMode == PictureBoxSizeMode.Zoom)
{
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
panel1.AutoScroll = true;
}
else
{
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
panel1.AutoScroll = false;
}
wwwafa9 2010-12-17
  • 打赏
  • 举报
回复
期待各位朋友的良策!

110,476

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧