Windows 表格:获取 window 大小以适合包含图像的图片框
Windows Forms: Obtain window size to fit a picture box containing an image
我有一个 Form
,它包含一个 Panel
(锚定到所有四个边),其中包含一个 PictureBox
(也锚定到 Panel
的所有四个边),在 Panel
上方有一个 Label
。 Panel
将 AutoScroll
设置为 true,PictureBox
包含未缩放的图像并将 SizeMode
设置为 AutoSize
,因此图像永远不会重新缩放和滚动条如果 PictureBox
/Form
尺寸不允许整个图像(如我所愿),则自动出现。
问题:如何在窗体的 Load 事件处理程序中确定初始 window 大小,以便 window 将完全适合图像,并且在 window 中没有滚动条PictureBox? PictureBox 的图像 属性 已经在构造函数中设置。
然后我会(如果 window 不是太大)将初始 window 大小设置为该大小,并将 window 调整大小限制为该大小的最大值.
非常感谢。
您可以尝试在设计器中设置一个 MaximumSize,然后在表单加载时执行此检查:
Image i = Image.FromFile("");
if (i.Width > this.MaximumSize.Width)
this.Width = MaximumSize.Width;
else
this.Width = i.Width;
if (i.Height > this.MaximumSize.Height)
this.Height = MaximumSize.Height;
else
this.Height = i.Height;
pbImage.Image = i;
如果您不知道您想要的最大尺寸是多少,那么您可以使用以下方法根据屏幕尺寸确定它:
Screen.PrimaryScreen.Bounds
编辑:
正如 Hans Passant 在评论中指出的那样:"Simply set the form's AutoSize property to True so it will automatically grow to try to accommodate the auto-sized picturebox"
这连同设置表单的 MaximumSize 应该适合您。
Hans Passant 的评论和 KoBE 的回答结合起来产生了我使用的答案:
我在设计器中将 Panel
和 Form
的 AutoSize
设置为 true。这会导致 Panel
,然后 Form
在加载之前调整大小,以便整个图像适合 window。然后在 Load
事件处理程序中,我有以下代码:
this.MaximumSize = this.Size;
... code to make sure MaximumSize isn't larger than the screen ...
// Turn off autosize so the user can shrink the window.
// Note: Changing AutoSize instantly changes the window size!
c_picturePanel.AutoSize = false;
this.AutoSize = false;
// Restore the window size.
this.Size = this.MaximumSize;
这会生成适合表单大小的 window,不会变得太大,如果 window 被用户缩小,则自动使用滚动条。
非常感谢 KoBE 和 Hans Passant。
我有一个 Form
,它包含一个 Panel
(锚定到所有四个边),其中包含一个 PictureBox
(也锚定到 Panel
的所有四个边),在 Panel
上方有一个 Label
。 Panel
将 AutoScroll
设置为 true,PictureBox
包含未缩放的图像并将 SizeMode
设置为 AutoSize
,因此图像永远不会重新缩放和滚动条如果 PictureBox
/Form
尺寸不允许整个图像(如我所愿),则自动出现。
问题:如何在窗体的 Load 事件处理程序中确定初始 window 大小,以便 window 将完全适合图像,并且在 window 中没有滚动条PictureBox? PictureBox 的图像 属性 已经在构造函数中设置。
然后我会(如果 window 不是太大)将初始 window 大小设置为该大小,并将 window 调整大小限制为该大小的最大值.
非常感谢。
您可以尝试在设计器中设置一个 MaximumSize,然后在表单加载时执行此检查:
Image i = Image.FromFile("");
if (i.Width > this.MaximumSize.Width)
this.Width = MaximumSize.Width;
else
this.Width = i.Width;
if (i.Height > this.MaximumSize.Height)
this.Height = MaximumSize.Height;
else
this.Height = i.Height;
pbImage.Image = i;
如果您不知道您想要的最大尺寸是多少,那么您可以使用以下方法根据屏幕尺寸确定它:
Screen.PrimaryScreen.Bounds
编辑:
正如 Hans Passant 在评论中指出的那样:"Simply set the form's AutoSize property to True so it will automatically grow to try to accommodate the auto-sized picturebox"
这连同设置表单的 MaximumSize 应该适合您。
Hans Passant 的评论和 KoBE 的回答结合起来产生了我使用的答案:
我在设计器中将 Panel
和 Form
的 AutoSize
设置为 true。这会导致 Panel
,然后 Form
在加载之前调整大小,以便整个图像适合 window。然后在 Load
事件处理程序中,我有以下代码:
this.MaximumSize = this.Size;
... code to make sure MaximumSize isn't larger than the screen ...
// Turn off autosize so the user can shrink the window.
// Note: Changing AutoSize instantly changes the window size!
c_picturePanel.AutoSize = false;
this.AutoSize = false;
// Restore the window size.
this.Size = this.MaximumSize;
这会生成适合表单大小的 window,不会变得太大,如果 window 被用户缩小,则自动使用滚动条。
非常感谢 KoBE 和 Hans Passant。