vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Grafik und Font · Grafische Effekte   |   VB-Versionen: VB.NET07.03.03
ZoomPictureBox (VB.NET)

Eine PictureBox mit Zoom-Funktion für VB.NET

Autor:   Richard MusiolBewertung:  Views:  23.959 
www.richard-musiol.deSystem:  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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.