Objekttypen casten oder ignorieren bei Option Strict On

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von roepke.

    Objekttypen casten oder ignorieren bei Option Strict On

    Hallo,
    habe folgendes Problem:

    Ich habe mehrere UserControls erstellt.
    Alle diese UserControls besitzen den folgenden Aufruf

    VB.NET-Quellcode

    1. OneToControllAll.BackToUnchanged(Me)

    und rufen dadurch in der Klasse

    VB.NET-Quellcode

    1. OneToControlAll
    die

    VB.NET-Quellcode

    1. Public SubPublic Class OneToControllAll
    2. Public Shared Sub BackToUnchanged(ByRef formTYPE As Object)
    3. Dim ctrl As Control
    4. For Each ctrl In formTYPE.Controls
    5. If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then
    6. ctrl.BackColor = UnchangedBackColor
    7. End If
    8. Next ctrl
    9. End Sub
    10. End Class

    auf.

    Aufgabe dieser Klasse ist es nun alle Hintergründe der ‚TextBoxen‘ und ‚ComboBoxen‘ des aufrufenden Objekts auf 'UnchangedBackColor' zu setzen.

    Solange ich Option Strict Off habe funktioniert das auch so.

    Mit Option Strict On bekomme ich natürlich die Meldung, dass ein späteres Binden von ‚ formTYPE.Controls‚ nicht möglich sei.
    Jedes aufrufende Objekt übergibt mit Me ja seinen Objekttyp.

    Gibt es eine Möglichkeit das zu casten oder BackToUnchanged mitzuteilen: vergiss den Objekttyp, suche einfach nach TextBoxen und ComboBoxen im aufrufenden und übergebenen Objekt und wenn Verfügbar, dann setzte deren Hintergründe zurück?
    Alter Beitrag:
    Spoiler anzeigen
    Du übergibst doch eine Form oder nicht? Zumindest lässt dies der Name formTYPE vermuten.
    Also übergibt es einfach als Form. Dann muss du da auch nicht rum casten.

    VB.NET-Quellcode

    1. Public Shared Sub BackToUnchanged(ByVal formTYPE As Form)
    2. Dim ctrl As Control
    3. For Each ctrl In formTYPE.Controls
    4. If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then
    5. ctrl.BackColor = Color.Green
    6. End If
    7. Next ctrl
    8. End Sub


    Hab ich getestet und funktioniert, übergebe ich meine Form1 macht er überall BackColor auf Green.


    //EDIT/ Nvm da hab ich wohl zu früh das lesen abgebrochen.
    Du Kannst direkt als Control übergeben dann kommt das Späte binden nicht.

    VB.NET-Quellcode

    1. Public Shared Sub BackToUnchanged(ByVal formTYPE As Control)
    2. Dim ctrl As Control
    3. For Each ctrl In formTYPE.Controls
    4. If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Then
    5. ctrl.BackColor = Color.Green
    6. End If
    7. Next ctrl
    8. End Sub
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „xChRoNiKx“ ()

    Danke für den schnellen Tipp. Damit funktioniert's.
    Der Name "formTYPE" ist an dieser Stelle etwas irreführend. Sorry. War am Anfang mal so, dann wurde es ein Control. Habe vergessen den Namen zu ändern und mich dabei selbst gefoppt. Hatte "ByRef formTYPE as Form" probiert, weil ich auf "form.." geschaut habe ohne zu berücksichtigen, dass es jetzt ein Control ist.