333 messaggi dal 05 novembre 2012


Prego...

Ho apportato un paio di modifiche al post precedente...la fretta è cattiva consigliera :(

Buon lavoro

Alessio
54 messaggi dal 10 aprile 2017
sono felicissima di esserci riuscita
questo è il codice che volevo

Imports System.Text

Public Class Form1


    Private Function GetAllControls2(ByVal control As Control, ByVal type As Type) As List(Of Control)

        Dim controls(control.Controls.Count - 1) As Control
        control.Controls.CopyTo(controls, 0)

        Dim output As List(Of Control) = (From c In controls.SelectMany(Function(ctrl) GetAllControls2(ctrl, type)).Concat(controls) Where c.GetType() = type).ToList()

        Return output

    End Function
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        '
        Dim types As New Dictionary(Of String, List(Of Type))

        Dim tabogg(5) As String
        tabogg(0) = "Button"
        tabogg(1) = "Label"
        tabogg(2) = "TextBox"
        tabogg(3) = "CheckBox"
        tabogg(4) = "GroupBox"
        tabogg(5) = "RadioButton"

        For i As Integer = 0 To 5
            types.Add(tabogg(i), New List(Of Type))
            Dim currentTypeTwo = System.Type.GetType(String.Format("System.Windows.Forms.{0}, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", tabogg(i)))
            Dim allControlsTwo As List(Of Control) = GetAllControls2(Me, currentTypeTwo)
            For Each controlTwo As Control In allControlsTwo
                Dim nOme = controlTwo.Name
                Dim testo = controlTwo.Text
                Dim siamparenti = controlTwo.Parent
                Dim A1 = controlTwo.BackColor
                Dim A2 = controlTwo.BackgroundImage
                Dim A3 = controlTwo.Font
                'ETC
                'ETC
                'ETC
                'ETC
                Dim nomiDiTuttiIControlli2 = From control In allControlsTwo Select controlTwo.Name
                Dim nomiDiTuttiIControlliVisibili1 = allControlsTwo.Where(Function(control) controlTwo.Visible).Select(Function(control) controlTwo.Name)
                Dim nomiDiTuttiIControlliVisibili2 = From control In allControlsTwo Where control.Visible Select control.Name

                Dim noop = ""
            Next
        Next
    End Sub

End Class






ora c'è una tabellina tabogg
nel codice di produzione ci sarà una struttura proveniente dalla lettura della tabella nel db
senza denigrare la bontà della Dictionary
preferisco questa da te proposta perché ho meno cose da scrivere
==================
Alessio per quando hai voglia e soprattutto tempo per favore mi dai un occhiata a
nomiDiTuttiIControlliVisibili1
e a
nomiDiTuttiIControlliVisibili2
bho...guardando con il dbg pare...ripeto pare...che mi restituisca sempre tutti gli elementi
certamente ho sbagliato in qualche cosa ...ho provato ma non riesco a capire

anticipatamente grazie
ciao
333 messaggi dal 05 novembre 2012
Ciao Liliana,

ho dato una pulita al codice eliminato refusi e riordinato un attimino...dimmi se funziona secondo le tue aspettative e dopo passiamo alle spiegazioni di quello che non è chiaro

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim tabogg = GetControlTypes()

    For Each controlTypeString As String In tabogg
        
        Dim controlType = Type.GetType(String.Format("System.Windows.Forms.{0}, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", controlTypeString))

        Dim allControlForCurrentType As List(Of Control) = GetAllControlByType(Me, controlType)

        For Each control As Control In allControlForCurrentType

            Dim nOme = control.Name
            Dim testo = control.Text
            Dim siamparenti = control.Parent
            Dim A1 = control.BackColor
            Dim A2 = control.BackgroundImage
            Dim A3 = control.Font
            'ETC
            'ETC
            'ETC
            'ETC
            Dim noop = ""
        Next

        Dim nomiDiTuttiIControlli = From control In allControlForCurrentType Select control.Name
        Dim nomiDiTuttiIControlliVisibili1 = allControlForCurrentType.Where(Function(control) control.Visible).Select(Function(control) control.Name)
        Dim nomiDiTuttiIControlliVisibili2 = From control In allControlForCurrentType Where control.Visible Select control.Name

    Next

End Sub

Private Shared Function GetControlTypes() As List(Of String)

    ' Successivamente in questo metodo metti la logica per il recupero da db

    Dim types As List(Of String) = New List(Of String) From {
        "Button",
        "Label",
        "TextBox",
        "CheckBox",
        "GroupBox",
        "RadioButton"
    }

    Return types

End Function

Private Shared Function GetAllControlByType(ByVal control As Control, ByVal type As Type) As List(Of Control)

    Dim controls(control.Controls.Count - 1) As Control
    control.Controls.CopyTo(controls, 0)

    Dim output As List(Of Control) = (From c In controls.SelectMany(Function(ctrl) GetAllControlByType(ctrl, type)).Concat(controls) Where c.GetType() = type).ToList()

    Return output

End Function


Alessio
54 messaggi dal 10 aprile 2017
come giusto che sia si avvicina la primavera e una bella pulita
graaaaaaaaaaaazzzzzzzzzzzzie!
gentilissimo
tutto chiaro chiarissimo direi spendente
mi son risposta da sola alla domanda di prima che era meglio che non formulavo (scusa)
che dire d'altro?
ciao e alla prossima
eheheh
buona serata
ciao a TUTTI
lily
333 messaggi dal 05 novembre 2012
 Bene :)
mi son risposta da sola alla domanda di prima che era meglio che non formulavo (scusa)

scusa dechè? meglio domandare e capire...che...fare copia incolla F5 che figata funziona tutto ma non ho capito una fava :)

che dire d'altro?

Buon weekend :)

/Ciao

Alessio
54 messaggi dal 10 aprile 2017
...AHAHAHAHAHAH...
chi tu od io che non ha capito una fava?
che simpatico che sei...
dalle mie parti si dice "ti ho beccato con i denti in bocca"
giusto appunto cercavo proprio te
caro Alessio buongiorno
:)
posso esporti un picccccccccccolissimo quesito?
grz
buon weekend anche a te
54 messaggi dal 10 aprile 2017
per quando vorrai
                    Dim myPropertyDettaglio As PropertyDescriptor
                    Dim obj As New Object
                    Dim lstProperties As New List(Of String)
                    Dim PRODESCOL As System.ComponentModel.PropertyDescriptorCollection
                    PRODESCOL = System.ComponentModel.TypeDescriptor.GetProperties(control.GetType)

                    For Each PRODES As System.ComponentModel.PropertyDescriptor In PRODESCOL
                        lstProperties.Add(PRODES.Name)
                        myPropertyDettaglio = PRODESCOL.Find(PRODES.Name, False)
                        noop11 = myPropertyDettaglio.DisplayName
                    Next


siam sempre nel ciclo For Each control As Control In allControlForCurrentType
che funziona benissimo con il codice postato ottengo la lista delle proprietà e mi sta bene è ciò che voglio
[lo sento mi sto perdendo in un bicchiere di barbera] non riesco a beccare il valore associato
per esempio
controllo Button
proprietà AutoSizeMode
dove sta ciò che mi dice che è impostato a GrowOnly?
come sempre grz mille
ciao
333 messaggi dal 05 novembre 2012
Ciao Liliana,

chi tu od io che non ha capito una fava?

No no non era riferito a te...anzi :)

Era riferito a ignoti, se ti fai un giro nel web (forum etc...) può capire cosa intendo...è pratica molto diffusa copiare ed incollare le soluzioni e non preoccuparsi di capire realmente cosa significa...basta che funzioni! e non c'è nulla di più deleterio :(

Quindi meglio fare una domanda, magari stupida e capire

Naturalmente questo è il mio pensiero...condivisibile o meno :)

Torniamo al tuo problemino :)

' Tramite il cast del tipo (in questo caso hai a disposizione l'intellisense ed eventuali errori vengono segnalati già in fase di compilazione)
Dim buttonControl As Button = TryCast(control, Button)
If Not buttonControl Is Nothing Then
    Dim autoSizeMode = buttonControl.AutoSizeMode
End If

' Accedendo ai metadati tramite TypeDescriptor (per accedere ai metadati hai a disposizione due modi: TypeDescriptor o la Reflection)
Dim propertiesDescriptor As PropertyDescriptorCollection =  TypeDescriptor.GetProperties(control.GetType)

' Metodo mirato, conosco il nome della proprietà e voglio recuperare il suo valore
Dim autoSizeModeValue = propertiesDescriptor.Find("AutoSizeMode", true).GetValue(control)

' Ciclo su tutte le proprietà
For Each propertyDescriptor As Object In propertiesDescriptor
    
    Dim propertyValue = propertyDescriptor.GetValue(control)

Next


Inizia a guardare il codice e se hai domande NON farle

Scherzo!

/Ciao

Alessio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.