Rubrik: Grafik und Font · Grafische Effekte | VB-Versionen: VB.NET | 07.03.03 |
ZoomPictureBox (VB.NET) Eine PictureBox mit Zoom-Funktion für VB.NET | ||
Autor: Richard Musiol | Bewertung: | Views: 23.959 |
www.richard-musiol.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Während der Arbeit an einem großen Projekt, entstanden auch einige Benutzersteuerelemente. Eines meiner Probleme war, dass die PictureBox von VB.NET nur die Stretch-Funktion, aber keine Zoom-Funktion unterstützt. Desshalb habe ich ein aus einer PictureBox vererbtes Benutzersteuerelement gebastelt, welches zusätzlich folgende SizeMode-Möglichkeiten hat:
- ZoomImageAlways: Das Bild wird immer gezoomt.
- ZoomImageUntilNormalSize: Das Bild wird nur kleiner gezoomt. Falls die ZoomPictureBox größer ist, wird es in Orginalgröße zentriert.
Meiner Meinung nach ist das eine sehr wichtige Funktion.
Hier der Code:
Public Class ZoomPictureBox Inherits PictureBox Public Enum SizeModes Normal = 0 StretchImage = 1 AutoSize = 2 CenterImage = 3 ZoomImageAlways = 4 ZoomImageUntilNormalSize = 5 End Enum Dim VSizeMode As SizeModes = SizeModes.Normal Public Shadows Property SizeMode() As SizeModes Get Return VSizeMode End Get Set(ByVal Value As SizeModes) VSizeMode = Value If Value < 4 Then MyBase.SizeMode = Value Else MyBase.SizeMode = PictureBoxSizeMode.Normal End If Me.Refresh() End Set End Property Protected Overrides Sub OnPaint( _ ByVal pe As System.Windows.Forms.PaintEventArgs) If Me.Image Is Nothing Then Exit Sub If VSizeMode < 4 Then MyBase.OnPaint(pe) Else With Me.Image If Me.Width / Me.Height < .Width / .Height Then If VSizeMode = 5 And Me.Width > .Width Then pe.Graphics.DrawImageUnscaled(Me.Image, _ (Me.Width - .Width) / 2, (Me.Height - .Height) / 2) Else pe.Graphics.DrawImage(Me.Image, 0, _ CInt((Me.Height - (Me.Width / .Width * .Height)) / 2), _ Me.Width, CInt(Me.Width / .Width * .Height)) End If Else If VSizeMode = 5 And Me.Height > .Height Then pe.Graphics.DrawImageUnscaled(Me.Image, _ (Me.Width - .Width) / 2, (Me.Height - .Height) / 2) Else pe.Graphics.DrawImage(Me.Image, _ CInt((Me.Width - (Me.Height / .Height * .Width)) / 2), _ 0, CInt(Me.Height / .Height * .Width), Me.Height) End If End If End With End If End Sub Protected Overrides Sub OnResize(ByVal e As System.EventArgs) MyBase.OnResize(e) Me.Refresh() End Sub End Class