Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Passare un form ad una sub per riutilizzo dei controlli contenuti

    salve a tutti, ho un problema che non riesco a risolvere al meglio per cui chiedo la vostra collaborazione...sono solo 2 domande...

    Io richiamo una SUB passando come parametro un particolare form che può cambiare a seconda dell'origine chiamata....
    Nell'utilizzare il form passato, noto che non posso poi utilizzare direttamente i controlli del form stesso....

    Ecco la procedura chiamante....

    Call AggiustaCampi(Me)
    Ed ecco l'inizio della sub...

    Public Sub AggiustaCampi(ByVal ctrlfrmPassed As Form)

    Dim frmPassed As New Form
    frmPassed = ctrlfrmPassed

    With frmPassed
    .Controls("NavigatorMagazzino").Enabled = False

    .Controls("cmdAccetta").Enabled = False
    'ecc.ecc.ecc.
    end with
    1° domanda:
    Come mai frmPassed non mi permette di accedere direttamente ai controlli del form passato ma devo usare questa forma ***.Controls("NavigatorMagazzino").Enabled = False *** ??

    2° domanda:
    Mi sono accorto che la prima riga del costrutto WITH funziona perchè ò'oggetto NavigatorMagazzino viene visto correttamente come controllo della form, mentre invece la seconda non funziona poichè ho racchiuso tale cmdAccetta (è un Button) in un GroupBox ...infatti non riesco a richiamare niente....e mi da errore....Come posso fare ?

    Grazie a chi vorrà rispondermi...
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  2. #2
    dovresti leggere i nomi dei controlli attraverso un ciclo For...Each e nel caso di un controllo GroupeBox nidificare il ciclo... i controlli interni al GroupeBox non sono visti direttamente dal Form che elenca fra i suoi controlli solo il Groupe e non i controlli al suo interno....

    per quando riguarda la 1° domanda: è normale che non ti fa accedere direttamente... tu dichiari un form generico e non un form specifico creato da te.... infatti come hai detto tu stesso all'argomento della sub puoi passare qualsiasi tipo di form il quale non conterrà gli stessi controlli di un'altro...
    I database... la mia passione + o -

  3. #3
    ho risolto il 2° problema...

    ho solo aggiunto

    frmpassed.Controls("GroupBox1").Controls("cmdAccet ta").Enabled

    Per il primo problema....su VB6 si poteva fare senza problemi....

    in fondo dichiaro un form generico ma poi gli passo il riferimento al form reale quindi non dovrebbe ereditare da quello ???
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    I controlli non sono altro che membri della classe, quindi sono ovviamente accessibili all'esterno di essa, non necessariamente usando Controls, ma sfruttando direttamente il nome stesso, purché la loro visibilità sia sufficiente.

    Per ciascun controllo esiste la proprietà Modifiers che permette proprio di modificare questa dichiarazione. Impostata a Public, consente di accedere al membro del controllo anche da un'altra classe, senza usare la proprietà Controls che, sicuramente, risulta più lenta rispetto all'accesso diretto (poiché implica una ricerca in una lista o, se va bene, in una Hashtable).

    In quanto al costrutto With, io lo eviterei come la peste ogni volta che è possibile.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Scusatemi, forse riapro una discussione molto vecchia. Ma ho esattamente questo problema.
    Ho due form. Su una form ho un treeview già popolata. Non riesco a richiamarla dalla seconda form. In particolare secondo la seconda form la treeview è addirittura vuota.

    Qualcuno sa speigarmi il perchè??

    Grazie infite!

    seminate linux che windows si pianta da se

  6. #6
    Mostra il codice che usi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Allora, mi trovo sulla form DettagliDocumento (dove ho il treeview: TreeViewAllegati)
    All'evento NuovoAllegato.Click

    codice:
     
       Private Sub NuovoAllegato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NuovoAllegato.Click
            Dim FormAllegati As New Allegato
            FormAllegati.MdiParent = InformationArchive
            FormAllegati.WindowState = FormWindowState.Normal
            FormAllegati.StartPosition = FormStartPosition.CenterScreen
            FormAllegati.Action = 1
            FormAllegati.ID_Informazione_Allegato = ID_Informazione
            FormAllegati.Show()
        End Sub
    Adesso mi trovo sul form Allegato:
    Inserisco il mio nuovo allegato e salvo il riferimento sul db. Adesso vorrei aggiornare il mio treeview richiamando una sub dichiarata public che si trova sempre nel form DettagliDocumento:

    codice:
    DettagliDocumento.VisualizzaDettagli()
    Ecco la Sub VisualizzaDettagli:
    codice:
            Dim NodeAllegati As TreeNode
            Me.TreeViewAllegati.AllowDrop = True
            TreeViewAllegati.BeginUpdate()
            TreeViewAllegati.SelectedNode = Nothing
            TreeViewAllegati.Nodes.Clear()
            TreeViewAllegati.Enabled = True
            OpenSqlConnection()
            Dim QueryAllegati As System.Data.SqlClient.SqlDataReader = CreateCommandReader("SELECT * FROM Allegati WHERE ID_Informazione=" & Me.ID_Informazione)
            While QueryAllegati.Read
                NodeAllegati = TreeViewAllegati.Nodes.Add(QueryAllegati("Titolo"))
                NodeAllegati.Name = QueryAllegati("ID_Allegato")
            End While
            QueryAllegati.Close()
            TreeViewAllegati.EndUpdate()
            CloseSqlConnection()
    Il problema è che non si aggiorna niente... ma l'interprete esegue correttamente tutte le righe!!
    seminate linux che windows si pianta da se

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.