none
Property Size.Height ausblenden RRS feed

  • 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

    Freitag, 16. April 2010 17:54

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
    Freitag, 16. April 2010 20:13
    Moderator
  • 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

    Samstag, 17. April 2010 07:53
    Beantworter

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
    Freitag, 16. April 2010 20:13
    Moderator
  • Vielen dank Thorsten,

    es geht natürlich so wie du beschrieben hast.

    vielen lieben dnak

    bernd

    Freitag, 16. April 2010 20:33
  • 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

    Samstag, 17. April 2010 07:53
    Beantworter
  • Hallo Elmar,

    super. So läuft die größenänderung sauber und syncron.
    das sieht spitze aus.

     

    vielen dank
    bernd

    Samstag, 17. April 2010 12:17