Newsgroup: it.comp.lang.visual-basic
Titolo: FORM E LORO RICHIAMO

Sicuramente mi e' sfuggito...... ma ho un grosso problema
Mi trovo in questa situazione:
Ho 2 progetti che compongono lo stesso software.
Da uno di questi devo richiamare una form contenuta nell'altro progetto e
proseguire da quel punto in poi.
E' possibile realizzare cio' per evitare la duplicazione del codice?
Da qualche parte ho letto la soluzione  ma non riesco piu' a trovarla.
In modo specifico:
sul progetto1 devo associare dei fornitori ad un componente dell'anagrafica.
Nel caso in cui io voglia aggiungere un nuovo fornitore devo premere un
command che mi rimanda sulla gestione dell'inserimento dei fornitori che e'
gia' presente e funzionante sul progetto2. Terminato il nuovo inserimento
devo ritornare al progetto in cui stavo gestendo l'anagrafica.
Sono disperato e non ho svoglia di copiare form e codice  aumentando le
possibilita' di bug.
grazie

Non vorrei sbagliare, ma non si può.
In oni caso, puoi richiamare il secondo progetto con un parametro:
Shell "SecondoEse.Exe Fornitore"
In questo caso, se fornitore è "" (nessun parametro) esegue il prg normalmente, altrimenti esegue una routine in base al
parametro passato
Ciao,
Moreno
#sirri#@
morenosoft.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
Home Page - 
http://www.geocities.com/SiliconValley/Bridge/1414/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

 E' possibile realizzare cio' per evitare la duplicazione del codice?
Potresti rendere progetto2 un activex exe aggiungendo una classe pubblica
che renda possibile l'accesso al form in questione, in questo modo il
progetto diventa istanziabile da un altro progetto (progetto1) oppure
eseguibile autonomamente.  
 

sul progetto1 devo associare dei fornitori ad un componente
dell'anagrafica.Nel caso in cui io voglia aggiungere un nuovo fornitore
devo premere uncommand che mi rimanda sulla gestione dell'inserimento dei
fornitori che e'gia' presente e funzionante sul progetto2. Terminato il
nuovo inserimentodevo ritornare al progetto in cui stavo gestendo
l'anagrafica.Sono disperato e non ho svoglia di copiare form e codice
aumentando lepossibilita' di bug.
----------------------------------------------
 Donatello Rizzo - Software Designer
 Via P. Nenni, 4 - 73040 Melissano (LE) ITALY
 Tel.: 0833/581370 - Mob.: 0347/3024131
 E-Mail: 
rav...@mail6.clio.it
------- KYOKUSHINKAI KARATE HOME PAGE --------
--  
www.geocities.com/Colosseum/Arena/1919/
 --
----------- THE RIZZO'S OBSOLETES ------------
 
http://www.geocities.com/Area51/Meteor/6686/
---------------------------------------------- 
--
Posted from [195.60.128.101]
via Mailgate.ORG Server - 
http://www.mailgate.org

Non vorrei peccare di presunzione, ma forse ho trovato strade
alternative..... non sono  ancora sicuro sul seccesso ma qualcosa si sta
muovendo. Se vi puo' interessare vi sapro' sapere ovviamente SOLO dopo una
accurata verifica.
Ciao e grazie ancora


Si pote....si pote........ ed anche in maniera non molto complicata. Ma
veniamo al dunque e per gradi.
diciamo che hai 2 eseguibili, progA e progB
da prgA dovresti fare eseguire la FORM7 di progB
prima considerazione a questo punto.... l'esecuzione di progB deve essere
Sincrona o Asincrona ??
ossia , quando lanci progB,  progA deve rimanere in attesa della chiusura o
puo' continuare indisturbato la sua esecuzione ??
dunque se opti per la soluzione asincrona l'unica cosa che ti serve e'
l'istruzione SHELL, per la sincrona devi usare queste belle API :
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long,
ByVal dwMilliseconds As Long) As Long
Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As
Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long,
ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal
dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal
lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO,
lpProcessInformation As PROCESS_INFORMATION) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const INFINITE = -1&
a questo punto indipendentemente da quale soluzione hai scelto quando lanci
il progB da progA gli devi passare un parametro.... te lo inventi giusto per
poi far capire a progB che e' stato chiamato e non eseguito direttemente.
Ossia per la soluzione asincrona
i = shell("progB  *X*",vbNormalFocus)
quel *X* e' una cosa di mia pura fantasia tu metti quello che vuoi.
e sul progA abbiamo terminato.
su progB nel form_load o nel form_activate a seconda di dove + ti conviene
metti nella 1a form del programma ( quella insomma che caricherebbe
nell'esecuzione normale) :
if command$ = "*X*" then
   'significa che sono stato chiamato
   form7.show vbmodal
   exit sub
end if
' altrimenti procede normalmente ............
qui chiaramente puoi giocare con la visibilita' o meno della 1a form del
progB ecc. ecc.
ed il gioco e' fatto !!!!!!!!
Non dimenticare che su Form7 di progB , quando chiudi la form,
nell'esecuzione normale torni alla form precedente, ma se e' stato chiamato
da progA devi chiudere il programma.
una considerazione importante e' d'obbligo.
Fai attenzione a cosa arriva nell'esecuzione "standard"   come variabili
globali, aperture di files, di database  ecc. alla form7 di progB perche'
devi fare in modo che sia tutto uguale indipendentemente che progB sia stato
chiamato da progA o meno..... mi spiego con un esempio :
Se in form7 di progB  scrivi in un database che magari apre ad esempio FORM3
di progB, quando chiami da progA,  la form3 di progB non viene eseguita e
quindi non hai il database impostato. OK ??
Spero di essere stato chiaro.
Fammi sapere come e' andata.
Ciao
Ven.

Dimenticavo........ esiste anche un'altra possibilita'  vediamo se ti puo'
piacere............
nel progetto1 aggiungi anche la form che ti interessa del progetto2. Bada
bene !! non copiandola e creandone una nuova ma solo dicendo ADD Form e
quindi ti vai a beccare la form interessata da progetto2.
Risultato ?? 2 progetti che condividono la STESSA FORM !!!!!!
Naturalmente valgono tutte le considerazioni che quando il progetto1 o il
progetto2 arriva ad eseguire la form "condivisa" , questa deve avere
indistintamente tutto settato a dovere.
Inoltre quando sei in progettazione, puoi modificare indistintamente dal 1^
o dal 2^ progetto tale form in quanto appunto e' "condivisa" da entrambi.
L'unica cosa che devi ricordarti sempre di fare dopo una modifica e' di
ricompilare entrambi i progetti.
Poi fammi sapere quale ti e' piaciuta di piu'.
Ciao di nuovo.
Ven.

Ci sto ancora lavorando...... vi sapro' dire tra non molto
Grazie intanto a tutti per la disponibilita'
Ciao