我正在尝试使用一个简单的工具条和一个图片框制作一个.Net WinForms 窗口。
Dim img As Image = Image.FromStream(New MemoryStream(File.ReadAllBytes(filename)))
PictureBox1.Image = img
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
ratio = img.Height / img.Width
图像显示正常,我的问题是我试图使表单大小正确,以正确的分辨率和正确的宽高比显示图像。而且因为表单除了图片框之外还有更多内容,我不确定如何调整大小。
如果我这样做
Me.Width = Me.Height * Ratio
那么由于窗口边框和工具条所需的空间,比例不准确。如何设置窗体初始大小以使图片框大小与图像尺寸完全相等?
发现答案是:
Me.ClientSize = New System.Drawing.Size(img.Width, img.Height + ToolStrip1.Height)
要在保持宽高比的同时调整大小,代码为:
Dim ratio as Double
Private Sub Form_Shown(sender As System.Object, e As System.EventArgs) Handles MyBase.Shown
Dim img As Image = Image.FromStream(New MemoryStream(File.ReadAllBytes(_filename)))
PictureBox1.Image = img
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
Image_ratio = img.Height / img.Width
Me.ClientSize = New System.Drawing.Size(img.Width, img.Height + ToolStrip1.Height)
Me.Activate()
AddHandler Me.Resize, AddressOf Form_SizeChanged
End Sub
Private Sub Form_SizeChanged(sender As Object, e As EventArgs)
'Resize while maintaining aspect ratio
Me.ClientSize = New System.Drawing.Size(PictureBox1.Height / Image_ratio, Me.ClientSize.Height)
End Sub
最佳答案
发现答案是:
Me.ClientSize = New System.Drawing.Size(img.Width, img.Height + ToolStrip1.Height)
要在保持宽高比的同时调整大小,代码为:
Dim ratio as Double
Private Sub Form_Shown(sender As System.Object, e As System.EventArgs) Handles MyBase.Shown
Dim img As Image = Image.FromStream(New MemoryStream(File.ReadAllBytes(_filename)))
PictureBox1.Image = img
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
Image_ratio = img.Height / img.Width
Me.ClientSize = New System.Drawing.Size(img.Width, img.Height + ToolStrip1.Height)
Me.Activate()
AddHandler Me.Resize, AddressOf Form_SizeChanged
End Sub
Private Sub Form_SizeChanged(sender As Object, e As EventArgs)
'Resize while maintaining aspect ratio
Me.ClientSize = New System.Drawing.Size(PictureBox1.Height / Image_ratio, Me.ClientSize.Height)
End Sub
关于.net - 调整 .NET Windows 窗体的大小,使控件(图片框)达到所需的大小,并在调整大小时保持纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22094880/