大佬教程收集整理的这篇文章主要介绍了如何在vb.net中使用滚轮放大Picturebox,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当我使用下面的Abdias软件代码更新时,当picturebox的Sizemode属性设置为StretchImage时,图片开始变小.我有一个使用鼠标的平移功能可能会干扰保持此代码无法正常工作.有任何想法吗?有什么可以阻止它正常工作?
解决了
这段代码对我来说比以下任何一个都好得多:
Private Sub PictureBox_MouseWheel(sender As System.Object,e As MouseEventArgs) Handles PictureBox1.MouseWheel If e.Delta <> 0 Then If e.Delta <= 0 Then If PictureBox1.Width < 500 Then Exit Sub 'minimum 500? Else If PictureBox1.Width > 2000 Then Exit Sub 'maximum 2000? End If PictureBox1.Width += CInt(PictureBox1.Width * e.Delta / 1000) PictureBox1.Height += CInt(PictureBox1.Height * e.Delta / 1000) End If End Sub
代码不计算缩放的中心点,但您可以使用e.LOCATIOn(或e.X / e.Y).
更新 – 这里是(应该)比以前更强大的新代码(见底部):
Public Class Form1 Private _originalSize As Size = Nothing Private _scale As Single = 1 Private _scaleDelta As Single = 0.0005 Private Sub Form_MouseWheel(sender As System.Object,e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseWheel 'if very sensitive mouse,change 0.00005 to something even smaller _scaleDelta = Math.Sqrt(PictureBox1.Width * PictureBox1.Height) * 0.00005 If e.Delta < 0 Then _scale -= _scaleDelta ElseIf e.Delta > 0 Then _scale += _scaleDelta End If If e.Delta <> 0 Then _ PictureBox1.Size = New Size(CInt(Math.round(_originalSize.Width * _scalE)),_ CInt(Math.round(_originalSize.Height * _scalE))) End Sub Private Sub Form1_Load(sender As System.Object,e As System.EventArgs) Handles MyBase.Load PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage 'init this from here or a method depending on your needs If PictureBox1.Image Isnot Nothing Then PictureBox1.Size = Panel1.Size _originalSize = Panel1.Size End If End Sub End Class
旧代码 – 工作,但在大的更改中不稳定可能是由于Scale()中的舍入错误:
Public Class Form1 Private _scale As New SizeF(1,1) Private _scaleDelta As New SizeF(0.01,0.01) '1% for each wheel tick Private Sub Form_MouseWheel(sender As System.Object,e As MouseEventArgs) Handles Me.MouseWheel 'count incrementally _scale.Height = 1 _scale.Width = 1 If e.Delta < 0 Then _scale += _scaleDelta ElseIf e.Delta > 0 Then _scale -= _scaleDelta End If If e.Delta <> 0 Then _ PictureBox1.Scale(_scalE) End Sub Private Sub Form1_Load(sender As System.Object,e As EventArgs) Handles MyBase.Load PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage 'init picturebox size = image size If PictureBox1.Image Isnot Nothing Then PictureBox1.Scale(New SizeF(1,1)) PictureBox1.Size = PictureBox1.Image.Size End If End Sub End Class
以上是大佬教程为你收集整理的如何在vb.net中使用滚轮放大Picturebox全部内容,希望文章能够帮你解决如何在vb.net中使用滚轮放大Picturebox所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。