none
Spezielle Routine mit Controls RRS feed

  • Frage

  • Hallo zusammen,

    mein Problem ist Folgendes:
    Mit dem einfachen Code

    For Each c as Control In Me.Controls
            If TypeOf c Is TextBox Then
                c.Text = ""
            End If
    Next

    kann man ja die Text-Eigenschaft von Textboxen schnell ändern.
    Wie aber kann man das in eine Routine verpacken, bei der als Parameter Control-Typ, irgendeine Property des Controls und zu der Property der neue Wert angegeben werden kann?
    Dazu habe ich noch keine Idee zum Programmieren... Weiß jemand Rat?

    Grüße-


    Dietrich

    Freitag, 10. Januar 2020 10:25

Antworten

  • Hallo Dietrich,

    bspw. so:

    Public Shared Sub SetControlProperty( Of T )( ByVal Control As Control, ByVal PropertyName As String, ByVal Value As T )
    
    Dim PropertyInfo As PropertyInfo = Control.GetType().GetProperty( PropertyName )
        PropertyInfo.SetValue( Control, Value )
    
    End Sub

    Aufruf dann bspw. so:

    <Klasse>.SetControlProperty( Of String )( Button1, "Text", Date.Now.ToString( "dd.MM.yyyy hh:mm:ss" ) )
    <Klasse>.SetControlProperty( Of Int32 )( Button1, "Width", 200 )
    

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert dherrmann Samstag, 11. Januar 2020 09:11
    Freitag, 10. Januar 2020 11:13
    Moderator

Alle Antworten

  • Hallo Dietrich,

    bspw. so:

    Public Shared Sub SetControlProperty( Of T )( ByVal Control As Control, ByVal PropertyName As String, ByVal Value As T )
    
    Dim PropertyInfo As PropertyInfo = Control.GetType().GetProperty( PropertyName )
        PropertyInfo.SetValue( Control, Value )
    
    End Sub

    Aufruf dann bspw. so:

    <Klasse>.SetControlProperty( Of String )( Button1, "Text", Date.Now.ToString( "dd.MM.yyyy hh:mm:ss" ) )
    <Klasse>.SetControlProperty( Of Int32 )( Button1, "Width", 200 )
    

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert dherrmann Samstag, 11. Januar 2020 09:11
    Freitag, 10. Januar 2020 11:13
    Moderator
  • Vielen Dank erst mal für die schnelle Antwort, Stefan.

    Allerdings bekomme ich folgenden Fehler:
    Fehler bei der Überladungsauflösung, da keine zugreifbare "SetValue" diese Anzahl von Argumenten akzeptiert.

    Grüße-


    Dietrich


    • Bearbeitet dherrmann Freitag, 10. Januar 2020 11:41
    Freitag, 10. Januar 2020 11:36
  • Hallo Dietrich,

    welches Framework (.NET oder .NET Core, dazu bitte auch die genaue Version) setzt Du ein?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 10. Januar 2020 11:57
    Moderator
  • Hallo Stefan,

    .Net Framework 4.7.2
    Ich habe mittlerweile geschrieben: PropertyInfo.SetValue(oControl, thePropVal, Nothing)
    Da kommt dieser Fehler nicht mehr.

    Aber eine Frage:
    Kann man das auch verwenden bei etwa solchen Properties: DatagridView.DefaultCellStyle.Font

    Grüße-


    Dietrich

    Freitag, 10. Januar 2020 12:09
  • Hallo Dietrich,

    auch mit 4.7.2 klappt das bei mir problemlos mit zwei Parametern.

      PropertyInfo.SetValue Methode [.NET 4.7.2]

    Du kannst das für beliebige Controls nehmen aber so in dieser Form nicht für Eigenschaften einer tieferen Ebene.



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 10. Januar 2020 12:41
    Moderator
  • Gibt's da keine Möglichkeit (Eigenschaften einer tieferen Ebene)?
    Etwa irgendwas "Rekursives"?

    Grüße-


    Dietrich

    Samstag, 11. Januar 2020 09:13
  • Hallo Dietrich,

    gibt es sicher. Wenn man sich sowas programmiert. Die wichtigsten Infos hast Du ja jetzt. Probier halt mal.

    Eine fertige Methode dafür hab ich nicht gefunden. Da das IMHO auch schon einige Zeit dauern würde, eine solche Methode zu entwickeln, ist das auch nicht unbedingt was für's Forum.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 11. Januar 2020 09:52
    Moderator
  • OK, hätte ja sein können, dass...

    Schönes WE für alle und Grüße-


    Dietrich

    Samstag, 11. Januar 2020 10:19