Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [VB.NET] Chiamare metodo da un oggetto ad un altro

    Buon giorno,
    sono nuovo del forum, pertanto inizio col salutare tutti.

    Stò sviluppando un applicativo Windows form per interfacciarmi con un sistema di pistoni dove per ogni pistone istanzio un oggetto di tipo button-like

    In pratica non mi è chiaro come possa chiamare nell'evento click sul bottone una sub della classe PLC la quale a sua volta viene istanziata dalla form.

    Mi spiego meglio: la Form main istanzia n bottoni quanti sono i pistoni da comandare. Dalla form istanzio anche l'oggetto PLC che contiene le funzioni per la scrittura e la lettura sul Plc che comanda realmente i pistoni.
    Come posso chiamare la funzione objPLC.AlzaPistone sull'evento click dall'oggetto bottone?

    Spero di aver esposto comprensibilmente la questione, e ringrazio quanti vorranno aiutarmi.

    --
    Saluti
    Colink

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    bè nell'evento click la chiami.. non capisco dove sta il problema..

  3. #3
    Originariamente inviato da Stoicenko
    bè nell'evento click la chiami.. non capisco dove sta il problema..
    Il fatto è che nell'oggetto button non vedo l'oggetto PLC (istanziato nella form).

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    dubito che sia una cosa possibile.. forse l'oggetto plc non è dichiarato globalmente nella form ma in un metodo (il form load?) e quindi alla fine del metodo viene distrutto

    ps: posta il codice che vediamo

  5. #5
    Originariamente inviato da Stoicenko
    dubito che sia una cosa possibile.. forse l'oggetto plc non è dichiarato globalmente nella form ma in un metodo (il form load?) e quindi alla fine del metodo viene distrutto

    ps: posta il codice che vediamo
    Public Class frmMain
    Public objPlc As PLC
    ...


    Public Sub New()

    For Each xmlNode In xmlRows
    ...
    Pistone = New CPistone(nID, nX, nY)
    ...
    Next

    objPlc = New PLC
    end sub

    End Class

  6. #6
    Originariamente inviato da colink31
    Public Class frmMain
    Public objPlc As PLC
    ...


    Public Sub New()

    For Each xmlNode In xmlRows
    ...
    Pistone = New CPistone(nID, nX, nY)
    ...
    Next

    objPlc = New PLC
    end sub

    End Class
    Provo a rispondermi da solo:
    se istanzio objPlc = New PLC prima di generare gli oggetti Pistine (i bottoni) e passo come parametro (definito byref nel costruttore) l'oggetto objPlc alla classe costruttore del pistone?
    E' giusto dal punto di vista sintattico?

    Public Sub New()
    objPlc = New PLC

    For Each xmlNode In xmlRows
    ...
    Pistone = New CPistone(nID, nX, nY, objPlc)
    ...
    Next

    end sub

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Sinceramente non ho capito ne quale sia il problema ne cosa serve quel codice.

    In ordine non ho capito:

    1- Dove dichiari l'oggetto Pistone, visto che qui crei un'istanza e basta, mi sembra.
    codice:
    Pistone = New CPistone(nID, nX, nY)
    2- Che classe è CPistone e cosa fa.

    3- Cosa contiene la classe PLC visto che la passi come ByRef

    4 Prima hai scritto:
    codice:
    Pistone = New CPistone(nID, nX, nY)
    e poi:

    codice:
    Pistone = New CPistone(nID, nX, objPlc)


    Andando a naso è chiaro che prima di passare come Byref la classe objPlc devi prima crearne un'istanza.
    Sbagliare è umano, perseverare è diabolico.

  8. #8
    Forse ho capito che vorresti fare, ma con il ciclo che hai messo dentro il costruttore
    non ti crei n oggetti cPistone, semplicemente fai puntare la tua variabile Pistone
    a n istanze che crei nel for.
    Dovresti crearti una collezione di cPistone e dentro il for aggiungere i pistoni che crei
    (mi pare di aver capito che sono 6) alla collection tipo:

    Dim Pistoni as List (of CPistone)
    ...
    dentro il costruttore nel for istanzierai i sei pistoni:

    Pistoni.add(new cPistone(nID, nX, nY))


    dentro l'handler di ogni pulsante poi gestirai la chiamata al metodo della classe cPistone:


    Pistoni(index).EseguiQualcosa()

    Se i button sono variabili e non sempre sei, allora dentro il for ti devi costruire pure dei commandButton che poi dovrai aggiungere alla collection control della form

  9. #9
    Originariamente inviato da Max Mercury
    Forse ho capito che vorresti fare, ma con il ciclo che hai messo dentro il costruttore
    non ti crei n oggetti cPistone, semplicemente fai puntare la tua variabile Pistone
    a n istanze che crei nel for.
    Dovresti crearti una collezione di cPistone e dentro il for aggiungere i pistoni che crei
    (mi pare di aver capito che sono 6) alla collection tipo:

    Dim Pistoni as List (of CPistone)
    ...
    dentro il costruttore nel for istanzierai i sei pistoni:

    Pistoni.add(new cPistone(nID, nX, nY))


    dentro l'handler di ogni pulsante poi gestirai la chiamata al metodo della classe cPistone:


    Pistoni(index).EseguiQualcosa()

    Se i button sono variabili e non sempre sei, allora dentro il for ti devi costruire pure dei commandButton che poi dovrai aggiungere alla collection control della form
    Ho riportato il codice sintetizzando forse un pò troppo..
    Pistone in realtà è un Hashtable che contiene tutte le 99 (e non 6) istanze dei pistoni da comandare. CPistone è una classe che eredita da button e aggiunge funzionalità.

    Il problema è chiamare una funzione di PLC all'interno dell'oggetto pistone.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Se magari rispondi alle domande..!
    Sbagliare è umano, perseverare è diabolico.

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.