Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Gestione degli eventi nei controlli personalizzati
Forum - C# / VB.NET - [VB.NET] Gestione degli eventi nei controlli personalizzati

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
lupino (Normal User)
Newbie


Messaggi: 13
Iscritto: 21/07/2012

Segnala al moderatore
Postato alle 10:59
Martedì, 02/10/2012
Buongiorno a tutti,
vado subito al nocciolo del problema, ho creato un nuovo controllo personalizzato che riproduce una sorta di visualizzatore analogico (circular gauge) in cui i vari valori sono indicati dalla classica lancetta ruotante, modello tester per intenderci.
Detto controllo è formato essenzialmente da una picturebox (picNeedle) contenente l'immagine della lancetta che, dopo essere fatta opportunamente ruotare viene passata alla proprietà image di un'altra picturebox (picGauge) avente come backgroundimage lo sfondo del visualizzatore.
Il nuovo controllo viene poi posto su un normale form senza bordi a cui ho dato una forma circolare (anche l'occhio vuole la sua parte), il tutto nel tentativo di creare una sorta di gadget il cui scopo dovrebbe essere quello di permettermi di visualizzare determinati valori senza per forza dover mantenere aperto il programma principale.
Detto form dovrebbe però poter essere mosso col mouse alla stregua dei suoi "cugini" normali.
Ho provato con:
Codice sorgente - presumibilmente VB.NET

  1. Dim posX As Integer
  2.     Dim posY As Integer
  3.     Private Sub dspAnalogical_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles dspAnalogical.MouseDown
  4.         posX = -e.X
  5.         posY = -e.Y
  6.     End Sub
  7.  
  8.     Private Sub dspAnalogical_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles dspAnalogical.MouseMove
  9.         If e.Button = MouseButtons.Left Then
  10.             Dim mousePos As Point = Control.MousePosition
  11.             mousePos.Offset(posX, posY)
  12.             CType(sender, Display).FindForm().Location = mousePos
  13.         End If
  14.     End Sub


(dspAnalogical è il nome dato al controllo) ma come è ovvio, essendo il controllo completamente ricoperto da picGauge, il "trucco" non funziona.
Com'è possibile passare gli eventi MouseDown e MouseMove che avvengono sul controllo alla relativa picturebox (penso sia questa la strada giusta)?

Ultima modifica effettuata da lupino il 02/10/2012 alle 11:00
PM Quote
Avatar
gl1963 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/09/2010

Segnala al moderatore
Postato alle 10:07
Mercoledì, 03/10/2012
Ciao

Se ho ben capito il tuo problema, questo piccolo progetto può essere un ottimo esempio su come ho fatto io per spostare una Form senza barra del titolo e con un'immagine che la ricopre.

Fammi sapere se ti è stato utile. :)


gl1963 ha allegato un file: spostaform.zip (415419 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
lupino (Normal User)
Newbie


Messaggi: 13
Iscritto: 21/07/2012

Segnala al moderatore
Postato alle 19:01
Mercoledì, 03/10/2012
Ciao gl1963, innanzitutto grazie per la risposta.
Purtroppo però il mio problema è un tantino più complicato (almeno per un newbie come me) la picturebox a cui io mi riferisco non è sul form come nel esempio che tu mi hai postato (nel mio caso: frmDisplay) ma all'interno di un controllo personalizzato che è a sua volta posto sul form.
Essa (la picturebox; picGauge) ricopre per intero il controllo personalizzato (dock=fill) impedendogli quindi di rispondere agli eventi relativi al mouse; di contro, essendo una parte di un controllo non è in grado (o meglio io non sò come fare) di generare i suddetti eventi verso l'esterno.
Una scappatoia potrebbe essere quella di usare la proprietà backgroundimage (l'ho usata in un altro form simile e funziona alla grande) relativa al form del controllo personalizzato in luogo della picturebox ma in tal caso il problema sarebbe dovuto all'incapacità di suddetto form di esplicare la proprietà sizemode=centerimage presente invece nelle picturebox... spero di essermi spiegato bene, se dovesse servire posso postare tutto il codice per intero.

Ultima modifica effettuata da lupino il 03/10/2012 alle 19:04
PM Quote
Avatar
gl1963 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/09/2010

Segnala al moderatore
Postato alle 16:43
Lunedì, 08/10/2012
Forse è meglio che mi fai avere il progetto per intero, in modo che possa fare qualche prova, altrimenti non saprei in che altro modo aiutarti.
Non ti garantisco però di poterci guardare a breve, nè naturalmente di riuscire a risolvere il tuo problema.
Ciao

PM Quote
Avatar
lupino (Normal User)
Newbie


Messaggi: 13
Iscritto: 21/07/2012

Segnala al moderatore
Postato alle 19:01
Martedì, 09/10/2012
Rieccomi, scusa per il ritardo ma sono convalescente per un operazione chirurgica che .... diciamo mi impedisce di star seduto a lungo :(
Ti allego il progetto o, meglio, la parte di esso in cui mi sono bloccato (il progetto intero integra svariati altri form e si riferisce ad un software in grado di leggere e graficare i dati provenienti da schede di prototipazione elettronica tipo Arduino o PStamp)
Come vedi, da codice, il form dovrebbe poter essere mosso utilizzando il tasto sinistro del mouse e chiuso col destro.
Il codice di per se è giusto ma il controllo circulargauge (cGauge nel form) non risponde all'evento mousedown o a quello mousemove (e neppure click o altri).
Da quanto posso immaginare la causa sta nel fatto che tali eventi non sono relativi al controllo ma alla picturebox con cui esso è creato e che lo ricopre per intero... da qui in poi non so più come procedere o, meglio, non so come poter passare l'evento dalla picturebox, picGauge nel controllo, al controllo stesso.
Idee???

Ultima modifica effettuata da lupino il 09/10/2012 alle 22:39
PM Quote
Avatar
lupino (Normal User)
Newbie


Messaggi: 13
Iscritto: 21/07/2012

Segnala al moderatore
Postato alle 22:43
Martedì, 09/10/2012
...non riesco a capire se il file è stato allegato o meno.... ci riprovo



lupino ha allegato un file: Indicatore Circolare.zip (609866 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
gl1963 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/09/2010

Segnala al moderatore
Postato alle 9:40
Mercoledì, 10/10/2012
Ciao
Ho scaricato il tuo allegato, ma mi dà diversi errori, forse perchè manca qualcosa.... non fa nulla: ho preparato un piccolo progetto di esempio.

"UserControl1" è, come nel tuo caso, un oggetto con una PictureBox di sfondo (in questo caso non ho ricoperto il controllo intero per dimostrare meglio come spostare l'oggetto sia cliccando su di esso o sull'immagine indifferentemente).

Praticamente devi guardare gli eventi "PicMouseDown", "PicMouseUp" e "PicMouseMove" che ho creato come pubblici all'interno dell'oggetto, e che ho richiamato nel Form "contenitore".

Ti chiedo scusa, ma non sono molto bravo a spiegare le cose in dettaglio. Secondo me comunque, il progetto d'esempio che ti ho allegato dovrebbe essere abbastanza semplice per aiutarti a capire come applicarlo al tuo programma.

Ciao


gl1963 ha allegato un file: UserControl01.zip (582916 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
lupino (Normal User)
Newbie


Messaggi: 13
Iscritto: 21/07/2012

Segnala al moderatore
Postato alle 12:59
Giovedì, 11/10/2012
Che dire gl1963..... PERFETTO!!! :k:
Grazie, finalmente ho risolto il problema... :hail:
Come immaginavo si trattava di rendere pubblici degli eventi del mio Controllo Utente, una lacuna a cui ora grazie a te ho finalmente sopperito (sapevo come rendere pubbliche le proprietà ma non gli eventi).
GRAZIE ANCORA.

P.S.
Per quanto riguarda gli errori del mio allegato, potrebbe essere dovuto al fatto che il progetto è stato sviluppato con VB.NET 2010 ed i relativi framework 4 (se no sbaglio)?
Per contro quando vado a visualizzare i tuoi file, VB express me li converte. Mah?! :om:

Ultima modifica effettuata da lupino il 11/10/2012 alle 13:00
PM Quote
Avatar
gl1963 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/09/2010

Segnala al moderatore
Postato alle 15:52
Giovedì, 11/10/2012
Di niente, figurati ... :) :) :)

Colgo l'occasione per chiederti una cosa: conosci il Cobol, per la precisione il NetExpress??
Mi servirebbe un esempio, il più semplice possibile, per richiamare una DLL Vb.Net appunto da Cobol.

Grazie in anticipo e comunque.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo