Benutzer mit den meisten Antworten
Property Size.Height ausblenden

Frage
-
Hallo zusammen,
wie kann ich in einem eigenen Control die Property Height ausblenden ?
Ich habe nach langem suchen viele Property's gefunden und geschat auszublenden.
aber bei Size finde ich leider nicht !
ich arbeite mit
Inherits System.Windows.Forms.Control
Mein Ziel ist es, die Höhe des Controls soll immer = der Breite sein.
Somit muss ich die Eigenschaft Höhe an die Eigenschaft Breite binden.vielen dank im vorraus
bernd
Antworten
-
Hallo Bernd,
die Height Property kannst Du nicht ausblenden, da sie Bestandteil der Size Struktur ist auf die Du keinen Einfluss hast. Eine direkte Zuweisung eines Werts an den Height Member wird ohnehin nicht unterstützt. Statt dessen wird immer eine neue Size Struktur übergeben. Auf diesen Vorgang kannst Du Einfluss nehmen, indem Du Size überschattest und der Basisklasse Deine individuellen Parameter für die Größe übergibst:
Public Class MyPanel Inherits Panel Public Shadows Property Size() As System.Drawing.Size Get Return MyBase.Size End Get Set(ByVal value As System.Drawing.Size) MyBase.Size = New Size(value.Height, value.Height) End Set End Property Protected Overrides Sub OnResize(ByVal eventargs As System.EventArgs) Static lInProc As Boolean If lInProc Then Exit Sub End If lInProc = True Me.Size = New Size(Me.Size.Height, Me.Size.Width) lInProc = False MyBase.OnResize(eventargs) End Sub End Class
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Thorsten DörflerModerator Freitag, 16. April 2010 20:52
- Als Antwort markiert Bernd Schlepütz Samstag, 17. April 2010 12:17
-
Hallo Bernd,
hier ein alternativer Ansatz über SetBoundsCore ,
der zumindest auf den ersten Test hin ganz nett im Designer aussieht.
Allerdings habe ich nicht getestet auf Risiken und Nebenwirkungen ;-)Public Class SquarePanel Inherits Panel Protected Overrides Sub SetBoundsCore( _ ByVal x As Integer, _ ByVal y As Integer, _ ByVal width As Integer, _ ByVal height As Integer, _ ByVal specified As System.Windows.Forms.BoundsSpecified) If (specified And BoundsSpecified.Width) = BoundsSpecified.Width Then height = width specified = specified Or BoundsSpecified.Height ElseIf (specified And BoundsSpecified.Height) = BoundsSpecified.Height Then width = height specified = specified Or BoundsSpecified.Width End If MyBase.SetBoundsCore(x, y, width, height, specified) End Sub End Class
Gruß Elmar- Als Antwort markiert Bernd Schlepütz Samstag, 17. April 2010 12:17
Alle Antworten
-
Hallo Bernd,
die Height Property kannst Du nicht ausblenden, da sie Bestandteil der Size Struktur ist auf die Du keinen Einfluss hast. Eine direkte Zuweisung eines Werts an den Height Member wird ohnehin nicht unterstützt. Statt dessen wird immer eine neue Size Struktur übergeben. Auf diesen Vorgang kannst Du Einfluss nehmen, indem Du Size überschattest und der Basisklasse Deine individuellen Parameter für die Größe übergibst:
Public Class MyPanel Inherits Panel Public Shadows Property Size() As System.Drawing.Size Get Return MyBase.Size End Get Set(ByVal value As System.Drawing.Size) MyBase.Size = New Size(value.Height, value.Height) End Set End Property Protected Overrides Sub OnResize(ByVal eventargs As System.EventArgs) Static lInProc As Boolean If lInProc Then Exit Sub End If lInProc = True Me.Size = New Size(Me.Size.Height, Me.Size.Width) lInProc = False MyBase.OnResize(eventargs) End Sub End Class
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Thorsten DörflerModerator Freitag, 16. April 2010 20:52
- Als Antwort markiert Bernd Schlepütz Samstag, 17. April 2010 12:17
-
Hallo Bernd,
hier ein alternativer Ansatz über SetBoundsCore ,
der zumindest auf den ersten Test hin ganz nett im Designer aussieht.
Allerdings habe ich nicht getestet auf Risiken und Nebenwirkungen ;-)Public Class SquarePanel Inherits Panel Protected Overrides Sub SetBoundsCore( _ ByVal x As Integer, _ ByVal y As Integer, _ ByVal width As Integer, _ ByVal height As Integer, _ ByVal specified As System.Windows.Forms.BoundsSpecified) If (specified And BoundsSpecified.Width) = BoundsSpecified.Width Then height = width specified = specified Or BoundsSpecified.Height ElseIf (specified And BoundsSpecified.Height) = BoundsSpecified.Height Then width = height specified = specified Or BoundsSpecified.Width End If MyBase.SetBoundsCore(x, y, width, height, specified) End Sub End Class
Gruß Elmar- Als Antwort markiert Bernd Schlepütz Samstag, 17. April 2010 12:17