Popolare ListBox da un altro form

di il
19 risposte

Popolare ListBox da un altro form

Ciao a tutti,
ho un problema che nonostante ricerche in rete, non ne sono ancora venuto a capo.
Ho fatto una DLL che comunica con un hardware esterno (seriale o TCP IP),con protocollo a richiesta (invio la richiesta e ricevo risposta).
Vogli fare una specie di diagnostica, attivabile con un menù popup, semplicemente aprendo un form con una listbox, nella quale voglio visualizzare, sia le chiamate, che le risposte.
In questa listbox, dovrò quindi scrivere nella routine di un timer (che invia la richiesta), e nella routine di ricezione dati.

Da menù popup apro il form CB_frmDebug

e nel timer
Dim sDati As String = UTF8.GetString(sCommand)
CB_frmDebug.lstDebug.Items.Add(sDati)
Ma la listbox rimane vuota.
Ho anche provato a creare una property nel form debug, ma idem....

Qualcuno sa indicarmi qualche dritta ?
Grazie 1000

Daniele G

19 Risposte

  • Re: Popolare ListBox da un altro form

    Scusa ma cosa fa

    Dim sDati As String = UTF8.GetString(sCommand)

    ?

    Cosa contiene sCommand?
  • Re: Popolare ListBox da un altro form

    Ciao,
    sCommand è un array di byte, che contiene la richiesta che invio.
    nello specifico:
    sCommand(0) = &H2
    sCommand(1) = &H6E
    sCommand(2) = &H4
    convertendolo in stringa da visualizzre nella listbox: STXnEOT

    grazie
    ciao
  • Re: Popolare ListBox da un altro form

    Prova ad usare quest'esempio :
    https://docs.microsoft.com/it-it/office/vba/language/reference/user-interface-help/listbox-control-additem-removeitem-methods-listindex-listcount-properties-exampl

    "Vogli fare una specie di diagnostica, attivabile con un menù popup, semplicemente aprendo un form con una listbox, nella quale voglio visualizzare, sia le chiamate, che le risposte" per accedere a questa Form come fai?
    hai provato anche https://docs.microsoft.com/it-it/dotnet/api/system.windows.forms.application.openforms?view=net-5.0 ?
  • Re: Popolare ListBox da un altro form

    Non ho capito bene quanti form hai
  • Re: Popolare ListBox da un altro form

    DanieleG ha scritto:


    e nel timer
    Dim sDati As String = UTF8.GetString(sCommand)
    CB_frmDebug.lstDebug.Items.Add(sDati)
    Ma la listbox rimane vuota.
    sei entrato in debug e controllato se la routine nel timer viene eseguita?
    e se viene eseguita in sDati ci trovi il valore che ti aspettavi?
  • Re: Popolare ListBox da un altro form

    Grazie a tutti,
    rispondo a tutti:

    Ho 2 form (il principale e quello che voglio usare come diagnostica)
    Sul principale ho creato un menu popup, per aprire il form diagnostica.
    Ho provato in 2 modi
    direttamente col nome:

    frmDiagnostica.showdialog
    oppure
    Dim myForm as new frmDiagnostica
    myForm.showdialog

    il timer viene eseguito correttamente ogni 250 msec. e la variabile contiene i dati da visualizzare (ho controllato in debug).

    Grazie
    Buona giornata a tutti

    Daniele G
  • Re: Popolare ListBox da un altro form

    EDIT vedi successivo
  • Re: Popolare ListBox da un altro form

    EDIT vedi successivo
  • Re: Popolare ListBox da un altro form

    DanieleG ha scritto:


    Grazie a tutti,
    rispondo a tutti:

    Ho 2 form (il principale e quello che voglio usare come diagnostica)
    Sul principale ho creato un menu popup, per aprire il form diagnostica.
    Ho provato in 2 modi
    direttamente col nome:

    frmDiagnostica.showdialog
    oppure
    Dim myForm as new frmDiagnostica
    myForm.showdialog

    il timer viene eseguito correttamente ogni 250 msec. e la variabile contiene i dati da visualizzare (ho controllato in debug).

    Grazie
    Buona giornata a tutti

    Daniele G
    Nel tuo caso hai messo due form da progettazione, non ne devi creare di nuovi, per caricare Form2 (CB_frmDebug) e renderlo diponibile, nel codice di Form1.vb devi scrivere:
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
             CB_frmDebug.Show()
             CB_frmDebug.Visible = False
        End Sub
    
    Queste istruzioni scatenano l'evento Load di CB_frmDebug, e lo rende invisibile.

    Una volta caricato CB_frmDebug, nel tuo caso non va più chiuso, perché altrimenti non potresti continuare a scriverci da Form1, ma devi gestire la sua visibilità:
    
        ' Visibile/Invisibile
        Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            CB_frmDebug.Visible = Not CB_frmDebug.Visible
        End Sub
    
    Se non vuoi ricaricare i valori nel form2, anche l'utente non deve poter chiudere CB_frmDebug ma renderlo invisibile, questo codice va in CB_frmDebug.vb:
    
        ' rende invisibile il form2 senza chiuderlo
        Private Sub CB_frmDebug_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
            e.Cancel = True
            Me.Visible = False
        End Sub
    
    Con questi accorgimenti la tua istruzione: CB_frmDebug.lstDebug.Items.Add(sDati) deve funzionare.
    Naturalmente i nomi devono essere corretti.

    Ho immaginato uno scenario con un button1 nel Form1 che visualizza/nasconde il form2(CB_frmDebug).
    Ma puoi adattare alle tue esigenze.

    Se non hai bisogno di mantenere i dati nel Form2, e ti va bene ricaricarli ogni volta, puoi usare CB_frmDebug.Hide() e CB_frmDebug.Show()
  • Re: Popolare ListBox da un altro form

    Boh...sto' sclerando !
    Neanche così funziona....ma, c'e' da dire questo:

    Se creo un progetto ex-novo con 2 form, una listbox e un timer, funziona.

    Nel mio no!! (ma il mio progetto non è un Exe standard, ma una libreria di classi ( una DLL).

    Daniele G
  • Re: Popolare ListBox da un altro form

    DanieleG ha scritto:


    Boh...sto' sclerando !
    Neanche così funziona....ma, c'e' da dire questo:

    Se creo un progetto ex-novo con 2 form, una listbox e un timer, funziona.

    Nel mio no!! (ma il mio progetto non è un Exe standard, ma una libreria di classi ( una DLL).

    Daniele G
    il form2 va a finire nella DLL??
    e il form1 no??
    per passare i dati tra le classi si devono rendere visibili metodi e proprietà e poi istanziare la classe dove serve.
  • Re: Popolare ListBox da un altro form

    Si certo, tutti e 2 i form fanno parte della DLL.
    Il primo form (che noi per comodità stiamo chiamando form1), si apre all'avvio.
    Grazie

    DG
  • Re: Popolare ListBox da un altro form

    DanieleG ha scritto:


    Si certo, tutti e 2 i form fanno parte della DLL.
    Il primo form (che noi per comodità stiamo chiamando form1), si apre all'avvio.
    Grazie

    DG
    All'avvio di cosa? La DLL come la avvii? mi sfugge qualcosa, mi piacerebbe capire come operi, me lo descrivi?:
    Tipo di progetto che hai aperto, come hai aggiunto i form (se il progetto non è winform), come compili, e poi come usi quello che hai compilato, naturalmente mi interessano solo le modalità, la parte interfacciamento hardware non serve per rislvere il problema che hai, visto che la lettura va a buon fine.
  • Re: Popolare ListBox da un altro form

    Brevemente:
    questa dll, si occupa di dialogare con una bilancia.
    é composta da 3 form (al momento), che sono:
    il form principale composto da un Panel dove all'interno c'è una Label che funge da "display", ovvero dove visualizzo il peso rilevato dalla bilancia.
    Da questo form principale, tramite menù popup richiamo un form per l' impostazione dei parametri di comunicazione (se seriale o rete, porta COM oppure IP e porta, timer di interrogazione ecc ecc), che li scrive in un file xml.
    Allo stesso modo volevo richiamare il form in causa della diagnostica.
    La DLL ha delle Function dichiarate Pubblic. tra le quali, quella dove inizializzo, andando a leggere il file xml, il modo di comunicazione e abilito il timer che inizia a inviare la richiesta.

    Per cui, in un progetto nuovo, prendo la mia dll dalla casella degli strumenti e la metto sul form (per cui vedo già il mio display), dopodichè richiamo la funzione che inizializza (descritta sopra), e inizio a visualizzare il peso.

    Grazie
    Saluti

    DG
Devi accedere o registrarti per scrivere nel forum
19 risposte