Richiamare funzione da altra form

lunedì 12 ottobre 2009 - 20.35

amartya Profilo | Junior Member

Ciao a tutti,

ho un grosso problema che non riesco a risolvere da solo.

Trattasi del fatto che dalla Form Main devo attivare una funzione le cui variabili si attivano premendo Ok su un'altra form.
Tuttavia io non voglio visualizzare la Form, ma devo ottenerne i valori delle variabili in essa specificata senza premere io Ok.
Infatti io riesco a far funzionare la funzione desiderata ma solo se premo io stesso Ok. Come posso "premerlo" automaticamente???

Esiste un metodo specifico
Il mio codice che sto provando nella funzione Main è il seguente:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Tuttavia questa funzione che passa attraverso l'inizializzazione dei componenti nella dialogue form dlgTest,
non mi fa passare eventuali aggiornamenti delle variabili presenti nelle textbox, ma solo i valori delle variabili presenti al momento della inizializzazione,
cioè del load.

Avete qualche suggerimento???

Vi ringrazio in anticipo
Amartya

alexmed Profilo | Guru

Ciao

>Trattasi del fatto che dalla Form Main devo attivare una funzione le cui variabili si attivano premendo Ok su un'altra form

Hai provato:

Form2.ButtonOk.PerformClick()

Ciao

alexmed

amartya Profilo | Junior Member

Ciao ti ringrazio della risposta, ma forse non ho ben capito come funziona. Infatti ho cercato di implementarlo ma con scarso successo

alexmed Profilo | Guru

Sempre che abbia inquadrato il problema:

Se la procedura che vuoi far partire si trova su un Form2, all'interno di un Button che si chiama "ButtonOk", dal FormMain la puoi richiamare con il codice che ti ho postato prima.

Quindi se sulla FormMain hai un Button, ad esempio "btnGO" all'interno dell'evento clik metterai

Form2.ButtonOk.PerformClick()

diciamo che è una specie di Call Form2.ButtonOk.Click (qualcuno mi vorrà ammazare dopo questa affermazione )

Ciao



alexmed

amartya Profilo | Junior Member

purtroppo non è esattamente così, in pratica nel form Main ho una funzione in cui i valori delle variabili che ne fanno parte vengono presi dalla form
dlgTest. Pertanto così come ho postato se dlgTest.ok è vera allora la funzione acqusisce i valori della form dlgTest e li trasmette alla funzione dentro la form Main.

Quindi

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Devo ottenere le variabili dal form dlgTest e solo successivamente posso lanciare la mia funzione.

Grazie cmq

Amartya

alexmed Profilo | Guru

Dunque:
Prova così

Nella tua m_dlgTest2 avrai 2 Button
uno lo imposti con la proprietà .DialogResult su YES, l'altro su Cancel

Poi trasformi la tua Sub

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


... fammi sapere

alexmed

AntCiar Profilo | Expert

Ciao. Puoi risolvere in questo modo:

nella form dlgtest crea una sub pubblica che chiamerai tipo

public sub ValidationOper()
...
end sub

ed al suo interno copiaci il contenuto dell'evento 'Click' sul bottone di OK.

Sull'evento click del bottone 'Ok' inserisci la chiamata alla nuova sub.

poi dall'esterno ti basta fare questo:

Dim m_dlgTest2 As dlgTest = New dlgTest(Automatico)
dlgTest2.ValidationOper()
If m_dlgTest2.ok Then
For i = 0 To index - 1
m_dlgTest2.init((dlgTest.Dlg_Type.PLACE_TEST_DLG), m_dlgTestr2.arr_contracts(i), m_dlgTest2.arr_orders(i), Me, i)
Call Tws1.placeOrderEx(contatore, m_dlgTest2.arr_contracts(i), m_dlgTest2.arr_orders(i)) '*** invia l'ordine "i"
Next
End If

... ed il gioco è fatto.
In questo modo inizializzi la form facendoci fare tutte le operazioni che faresti normalmente sulla pressione del button Ok ma col vantaggio di non visualizzare la form.

Spero ti sia stato di aiuto

Cristian

amartya Profilo | Junior Member

Ho provato la tua soluzione inserendo nel form m_dlgTest2 al comando cmdOk1 la sola istruzione

call ValidationOrder()

Mentre nella sub

Public Sub ValidationOrder()

Tutto il codice precedentemente contenuto nella sub cmdOk1_click.

Ma nonostante questo non riesce a prendermi le variabili, come se non fosse stato premuto Ok

Infatti il mio obbiettivo è quello di effettuare la funzione senza che manualmente chiudo il form m_dlgTest2 premendo su Ok e quindi facendo partire l'ordine.

Il problema è li dentro ma non riesco a risolverlo.


amartya Profilo | Junior Member

Ciao grazie dei consigli, infatti ho provato anche la tua soluzione ma mi rimane la dialogue Form aperta, che devo chiudere premendo con Ok

Infatti in questo punto dovrei chiudere la form m_dlgTest2

If Result = System.Windows.Forms.DialogResult.OK Then



Non so forse sbaglio io in qualche cosa.

Grazie ancora .

amartya Profilo | Junior Member

Ho risolto inserendo nella MainForm il comando

Call m_dlgTest.cmdOK1_Click(Nothing, Nothing)

che va poi a lanciare


la public sub InvalidationOrder()




Grazie a tutti

Amartya
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5