Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Goblin, non so se il tuo esempio possa essere utile a iz1kbp, spero di si, poi lui ci dirà.
Ho comunque scritto un esempio in VB6 che dovrebbe risolvere, le multi istanze, che potrebbe permettere di riciclare i vecchi codici VB6.
L'esempio è terra terra, va sviluppato in base alle esigenze, mostra solo come aprire più istanze dello stesso programma. Ad ogni apertura la nuova istanza si autoassegna un nuovo ID e usa questo ID per salvare lo stato del programma in un file testo univoco solo per quell'ID, nell'esempio lo stato del programma è rappresentato dal contenuto testo di una Text.
Puoi usare il codice VB6, devi aggiungere il riferimento MICROSOFT SCRIPTING RUNTIME, mettere una label, un bottone e una text nel form:
Codice sorgente - presumibilmente VB.NET
Dim ComunicazioneID AsString' percorso e nome del file che contiene l'ultimo ID
Dim NomeDelProgramma AsString' nome dell'eseguibile
Dim StatoID AsString' percorso e nome del file composto con l'ID
Dim ID AsInteger' ID attuale
Dim Fso AsNewFileSystemObject'necessita riferimento MICROSOFT SCRIPTING RUNTIME
PrivateSub Command1_Click()
' salvo il testo in textbox, ma tu salverai lo stato del tuo pannello
' il nome del file sarà univoco perché composto con l'ID
Open StatoID For Output As #3
Print #3, Text1.Text
Close #3
EndSub
PrivateSub Form_Load()
' trovo il nome dell'exe
NomeDelProgramma = App.EXEName&".exe"
'nella directory dell'exe creo un file dove ci sarà salvato l'ultimo ID
ComunicazioneID = App.Path&"\ComunicazioneID.txt"
' controllo se il programma è in esecuzione
If App.PrevInstance=TrueThen
' programma in esecuzione assegno un ID progressivo
If Fso.FileExists(ComunicazioneID)Then
Open ComunicazioneID ForInputAs #1
Input #1, leggi
Close #1
' aggiungo 1 all'ID presente nel file
IfIsNumeric(leggi)Then
ID = leggi + 1
EndIf
' risalvo con l'ID aggiornato
Open ComunicazioneID For Output As #2
Print #2, ID
Close #2
' aggiorno le variabili in accordo con l'ID creato
Goblin, non so se il tuo esempio possa essere utile a iz1kbp, spero di si, poi lui ci dirà.
Questo lo ignoro pure io ... il demo che ho imbastito è in base alle info che "mi sembra" di aver capito, ma dopo aver visto il tuo codice ... credo di non aver capito niente
La logica che ho seguito è registrare, in una lista, una sequenza di click su una "tastiera virtuale" (bottoni) e salvarla con un nome... id... quello che volete, in modo da averla a disposizione per le future tastiere, e sino a qui tutto resta in memoria, dunque è relativamente semplice si hanno i vari puntatori ai relativi bottoni, quando vado a scrivere queste sequenze nel file .dat oltre al nome dello schema e alla sequenza di bottoni ho salvato i "componenti" bottoni selezionati, in questo modo quando viene richiamata la sequenza è più semplice eseguire i vari comandi in quanto si conosce "l'istanza" da dove arriva il comando.
G.
Ciao Carlo, Ciao Goblin
ho fatto questo piccolo esempio in vb6 per far capire il mio problema in maniera piu pratica.
Ho due form , uno da duplicare con al'interno due comandi (2 pulsante e 2 label, il pulsante semplicemente scrive un numero nella label), ed uno master che deve creare copie del precedente ,inoltre al suo interno cè un pulsante che deve far partire la procedura del bottone 1 che si trovera nel form duplicato numero 1 (ma potrebbe esser il 2 o altri).
Il mio problema è che il comando di questo bottone
NewPage(1).Command1_Click
non fa partire nessuna procedura e non da nessun errore...semplicemente non fa nulla.
Leggendo in giro qualcuno parla di moduli di classe...ma sinceramente non li ho mai usati e non so come funzionano.
Leggendo un vecchio manuale di vb6 ho letto una cosa interessante sulle multi istanze: la proprieta TAG dei form.
ho riscritto parte del codice postato prima , nella form LANCIO.
Ora man mano che creo i form li indiizzo con il tag in modo da renderli univochi e reperibili anche come controlli.
Dal form principale,in questo caso, ho voluto comandare i controlli del form riaperto per la terza volta.Cambiando il numero del frm.tag indirizzo l'istanza che volgio e leggo lo stato del controllo sull'istanza scelta.
E' stata dura....ma ce l'ho fatta! ora devo modificareil mio programma con questa procedura...ma penso che sia abbastanza semplice (forse)!
comuque grazie a tutti.
questo il codice cambiato nel form LANCIO
Private Sub cmdNew_Click()
Dim myForm As Form
Set myForm = New frmMain 'Creo nuova istanza del form
With myForm
.Tag = Pages
.Show
.Caption = ">> numero tag" & Pages
Pages = Pages + 1
End With
Set myForm = Nothing 'pulisci i ltutto
End Sub
Private Sub Command1_Click()
Dim frm As Form
For Each frm In Forms
If frm.Tag = "3" Then 'lvoglio interagire con il terzo form aperto...ma puo essere anche una'altro....
frm.Text1 = "ciao" ' scrivo
frm.Text2 = "ok2" ' idem cs
frm.Command1_Click ' qui comando il controllo da "remoto"
frmlancio.Label1 = frm.Text1.Text ' qui vado a catturare il testo di una label e la riporto nella principale
Exit For
End If
Next frm
End Sub
l'errore lo avevi fatto perché cancellavi la matrice che conteneva i form, il tuo vecchio codice funziona, guarda l'allegato
scegli tu quale ti piace di più.
il tag è una proprietà di tutti i controlli non solo del form.
Ho visto ora...si,il tag è comune ma non l'ho mai usato e ne ignoravo l'esistenza e l'uso.
Chissa quante altre proprieta esisteno gia ma io me le sono autocostruite ,complicandomi la vita,ignorandone l'esistenza.
Si chiama esperienza...
grazie a tutti.