vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB.NET01.11.06
Vergessenes Frame Control in VB.NET 2005

Mit diesem Klassenmodul verfügen Sie ab sofort auch unter VB.NET 2005 wieder über das aus den VB-Vorgängerversionen bekannte Frame-Control.

Autor:  Roland WutzkeBewertung:     [ Jetzt bewerten ]Views:  1.612 
http://www.vb-power.netSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Aus welchen Gründen auch immer, hat Microsoft im Visual Studio das Frame Control vergessen. Es gibt zwar das Panel und die GroupBox, doch durch die begrenzte Möglichkeit des BorderStyles kann kein, auch nicht nur annäherndes, Look & Feel eines Frames erzeugt werden. Was liegt also näher auf der Hand, als uns selber ein Frame Control zu bauen.

Die nachfolgende Komponenten Klasse Frame wird dabei von einem ContainerControl geerbt, sodass sie die gleichen Eigenschaften wie ein Panel oder GroupBox aufweist. Zusätzlich erzeugen wir einen 3D BorderStyle und geben dem Frame noch eine Caption mit.

Das Frame kann, getrennt für den Rahmen und der Caption, je 10 verschiedene BorderStyles verwenden, sodass wir wieder das "Look & Feel“ eines Frames erhalten.

Nachfolgend die Klasse "Frame“:
Fügen Sie Ihrem Projekt eine neue Klasse hinzu, und kopieren den Code in das Klassenmodul. Erstellen Sie einmal das Projekt, um so die Komponente zu erzeugen. VB.NET stellt die neue Komponente automatisch in die ToolBox oben ein. Sie können jetzt die so neu erzeugte Komponente auf Ihre Form ziehen und damit wie gewohnt arbeiten.

Imports System.ComponentModel
Imports System.ComponentModel.Design
 
''' <summary>
''' Frame Container Control
''' </summary>
''' <remarks>
''' Frame Container Control - VB.Net 2005 Komponente.
''' =================================================
''' Diese Komponenten Klasse stellt einen Steuerelenenten Container
''' im "Look and Feel" eines Frames zur Verfügung. Die Komponente
''' verfügt über je 10 BorderStyles für das Frame und die Caption.
''' 
''' Oktober 2006 - VB-Power.net
''' http://www.vb-power.net
''' </remarks>
Public Class Frame
   Inherits System.Windows.Forms.ContainerControl
 
   Private m_label As New CaptionLabel
   Private m_BorderStyle As Border3DStyle = Border3DStyle.Etched
   Private m_BorderStyleCaption As Border3DStyle = Border3DStyle.Adjust
   ''' <summary>
   ''' Interne Label Komponenten-Klasse mit 3D BorderStyle
   ''' </summary>
   Protected Class CaptionLabel
      Inherits System.Windows.Forms.Label
 
      Private m_CaptionStyle As Border3DStyle = Border3DStyle.Etched
 
      Public WriteOnly Property CaptionStyle() As Border3DStyle
         Set(ByVal value As Border3DStyle)
            m_CaptionStyle = value
            Me.Invalidate()
         End Set
      End Property
 
      Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)
         MyBase.OnPaintBackground(pevent)
         ControlPaint.DrawBorder3D(pevent.Graphics, pevent.ClipRectangle, m_CaptionStyle)
      End Sub
   End Class
   ' Beginn der Hauptklasse
   ' ======================
   Public Sub New()
      Me.Controls.Add(m_label)
   End Sub
   Protected Overrides Sub OnPaintBackground(ByVal pevent As PaintEventArgs)
      MyBase.OnPaintBackground(pevent)
 
      ' Abmaße bestimmen
      Dim g As Graphics = pevent.Graphics
      Dim r As Rectangle = pevent.ClipRectangle
      Dim h As Int16 = (g.MeasureString(Me.Text, Me.Font).Height / 2) + 1
      Dim rect As Rectangle = New Rectangle(r.X, r.Y + h, r.Width, r.Height - h)
 
      ' 3D Rahmen Zeichnen
      ControlPaint.DrawBorder3D(g, rect, m_BorderStyle)
 
      ' CaptionLabel zeichnen
      With m_label
         .AutoSize = True
         .Text = Me.Text
         .Padding = New Padding(1, 2, 1, 2)
         .BackColor = Me.BackColor
         .Location = New Point(15, 0)
         .CaptionStyle = m_BorderStyleCaption
         .Visible = IIf(.Text <> "", True, False)
      End With
   End Sub
   Protected Overrides Sub OnScroll(ByVal se As System.Windows.Forms.ScrollEventArgs)
      MyBase.OnScroll(se)
      Me.Invalidate()
   End Sub
   <Category("Darstellung"), Description("Legt den BorderStyle fest, oder liest ihn aus.")> _
   Public Property BorderStyle() As Border3DStyle
      Get
         Return m_BorderStyle
      End Get
      Set(ByVal value As Border3DStyle)
         m_BorderStyle = value
         Me.Invalidate()
      End Set
   End Property
   <Category("Darstellung"), _
   Description("Legt den BorderStyle für die Beschriftung fest, oder liest ihn aus.")> _
   Public Property BorderStyleCaption() As Border3DStyle
      Get
         Return m_BorderStyleCaption
      End Get
      Set(ByVal value As Border3DStyle)
         m_BorderStyleCaption = value
         Me.Invalidate()
      End Set
   End Property
   <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
   Public Overrides Property Text() As String
      Get
         Return MyBase.Text
      End Get
      Set(ByVal value As String)
         MyBase.Text = value
         Me.Invalidate()
      End Set
   End Property
End Class

Noch ein Tipp:
Sie können das Frame Control auch als Line Control benutzen, indem Sie die Text Eigenschaft löschen und die Size.Height Eigenschaft auf 3 einstellen. Sie erhalten so eine horizontale 3D-Linie.

Viel Spaß
Roland Wutzke