Intercettare click su button in un DLL

domenica 19 giugno 2011 - 18.34
Tag Elenco Tags  VB.NET  |  .NET 4.0

luka82 Profilo | Junior Member

Ho una DLL che uso in diversi programmi, nella DLL visualizzo una Form che ha un button, e fin qui ci siamo...
adesso vorrei gestire in ogni programma che usa la DLL il click del button. In modo che ogni programma usa la DLL per visualizzare la form che è la stessa ma solo la pressione del click deve essere gestita dal programma principale. Spero di aver reso l'idea.
Cosa mi suggerite?

whiteflash Profilo | Junior Member

adesso non so come hai creato questa dll, io ti suggerirei di provare a creare un nuovo evento personalizzato nella dll, in modo di eseguirlo quando si verifica l'evento click del button
così poi puoi gestire questo evento in tutte le altre app come vuoi
---------------------------------------------
Newbie esperto VB.NET 2010 e WPF

luka82 Profilo | Junior Member

Avevo fatto una cosa del genere, nella DLL:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
e nell'applicazione principale:
Public WithEvents EventiForm1 As Tools.Form1 Private Sub prova() Handles EventiForm1.BtnClick MsgBox("aaa") End Sub

il problema è che la sub non viene mai richiamata.
Ps. apro la Form1 direttamente nella DLL e questo non mi consente di inizializzare con le nuove istanze della Form la variabile EventiForm1.

Ciao

Cteniza Profilo | Guru

Per gestire un evento condiviso dovresti avere un delegate.
http://www.vbdotnetheaven.com/UploadFile/ajaiman/EventHandlingVbDotNet04202005052805AM/EventHandlingVbDotNet.aspx

luka82 Profilo | Junior Member

Purtroppo non sono riuscito ad adattare l'esempio che mi hai postato, però il primo metodo che ho postato funziona solo se apro la form dall'applicazione principale e non dalla DLL
Public WithEvents EventiForm1 As Tools.Form1

Private Sub prova() Handles EventiForm1.BtnClick

MsgBox("aaa")
End Sub

Provo a spiegare un po' meglio la struttura:
Applicazione principale(nella quale voglio mettere una funzione da richiamare se clicco su un tasto in una form aperta nella DLL)
DLL nella quale gestisco a runtime l'inserimento di voci di menu e caricamento form(e proprio in una di queste form c'è un tasto il cui click dovrei intercettarlo nell'applicazione principale)
il problema si risolverebbe se caricassi la form dall'applicazione principale in quanto riuscirei a valorizzare la EventiForm1(infatti ho provato e funziona), invece caricando la form nella DLL non so come valorizzare la EventiForm1 con l'istanza della form aperta.
Purtroppo l'Handles richiede che una variabile WithEvents sia specificata nel tipo che la contiene o in uno dei suoi tipi di base...
Idee?

willy_80 Profilo | Senior Member

Ciao, prova così:

subito sotto alla dichiarazione della tua classe dichiari l'evento, se vuoi ci puoi anche associare dei dati es Par_A, Par_B, ecc...

Public Event My_MouseClick(ByVal Par_A As Double, ByVal Par_B As Double)

poi nell'evento click del btn chiami il tuo evento

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RaiseEvent My_MouseClick(1, 2)
End Sub

e il gioco è fatto.

luka82 Profilo | Junior Member

>Ciao, prova così:
>
>subito sotto alla dichiarazione della tua classe dichiari l'evento,
>se vuoi ci puoi anche associare dei dati es Par_A, Par_B, ecc...
>
>Public Event My_MouseClick(ByVal Par_A As Double, ByVal Par_B
>As Double)
>
>poi nell'evento click del btn chiami il tuo evento
>
>Private Sub Button1_Click(ByVal sender As System.Object, ByVal
>e As System.EventArgs) Handles Button1.Click
> RaiseEvent My_MouseClick(1, 2)
> End Sub
>
>e il gioco è fatto.
Si così è "facile" il mio problema è che apro la form nella DLL qunindi nell'EXE non ho alcun riferimento ad essa, quindi non posso fare una cosa del genere:
Public WithEvents aaa As Tools.Form1
Private Sub ciao() Handles aaa.BtnClick
MsgBox("ciao")
End Sub
perché dovrei inizializzare la variabile WithEvents aaa con l'istanza della Form1 quando viene visualizzata nella DLL...non so se ho reso l'inghippo.
Ciao e grazie

willy_80 Profilo | Senior Member

ti basta eseguire la generazione di un evento dal progetto contenente la dll nello stesso modo che hai usato nella dll

luka82 Profilo | Junior Member

???
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5