Controllo form in primo piano rispetto ad un'altro

domenica 18 marzo 2012 - 12.51
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Windows Vista  |  Windows XP  |  Visual Studio 2010  |  Visual Studio 2008

gabry90 Profilo | Newbie

salve..ho questa domanda.

Io ho due form. Il primo ha dentro un pulsante che al click apre il secondo form in un nuovo thread. e fin qui sono a posto

ora il secondo form deve controllare che quando premo un tasto deve fare una determinata cosa, ora il controllo sui tasti lo gia fatto, il problema e che io voglio che il controllo sul keypress me lo faccia solo ed esclusivamente quando il secondo form è in primo piano rispetto al primo. il problema e che non esiste un evento del genere, ho provato focus ma non funziona. quindi ho messo il controllo in un timer che quando si verifica l'evento mouseenter il timer si attiva e quando si verifica l'evento mouseleave si ferma. il vero problema che non riesco a risolvere e che dato che ci sono dei componenti all'interno devo per forza spostarmi con il mouse fuori dal controllo e posizionarlo sul form. come faccio a risolvere questa cosa??? vorrei che quando si facesse click sul secondo form e quindi che quando venisse in primo piano rispetto al primo mi attivasse il timer senza dovermi preoccupare dove è posizionato il mouse??? esiste qualche evento del genere? perchè io le ho provate tutte ma sto divenmtando matto :)

Giamp72 Profilo | Junior Member

Hai provato gli eventi Activate e Paint del form?

Giamp72

gabry90 Profilo | Newbie

si tutti...e nessuno che funge..alternative?

Giamp72 Profilo | Junior Member

Prova a gestire il keypress su entrambi i form ed usa zorder per sapere chi sta davanti...
Giamp72

gabry90 Profilo | Newbie

non ho capito cosa vuoi dire? devo inserire l'evento in ogni controllo nel form compreso? cosa è zorder?

Giamp72 Profilo | Junior Member

Scusa zOrder esisteva in VB6 in vbNet mi pare la variabile sia TopLevel.
form.toplevel ti torna true se la form è in primo piano
in questo modo se gestisci su entrambi i form la routine KeyPress puoi decidere cosa fare in funzione del topLevel del form che ti interessa.

Ti scrivo al volo un esempio di ciò che intendo dire...

'apriamo i due form
dim form1 as new ftest1
dim form2 as new ftest2

sub KeyPress (sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles ftest1.keypress
if form1.toplevel then exit sub

If InStr("0123456789", e.KeyChar) = 0 Then
msgbox "hai premuto una lettera"
else
msgbox "hai premuto un numero"
End If

end sub

sub KeyPress (sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles ftest2.keypress
if form1.toplevel then exit sub

If InStr("0123456789", e.KeyChar) = 0 Then
msgbox "hai premuto una lettera"
else
msgbox "hai premuto un numero"
End If

end sub


fammi sapere se risolvi.
ciao
Giamp72

gabry90 Profilo | Newbie

no ma non è questo che intendo...quello che voglio dire e che se io ho un form e al suo interno una picturebox e voglio che con l'evento keypress sul form mi faccia una determinata cosa. il problema è che non funziona quando clicco sulla picturebox. ma di fatto la picturebox sta nel form. io voglio che mi faccia quell'evento keypress anche quando sono sulla picturebox o qualsiasi altro componente, l'importante e che il mouse sia nel form :)

Giamp72 Profilo | Junior Member

Caro Gabry90.. non mi pare avessi chiesto la stessa cosa... hai cominciato con focus su due form e hai finito con un solo form con più oggetti all'interno...
eheheh hai le idee un po confuse?!?!
Ad ogni modo se il problema è questo, la soluzione è semplicissima!!
gestisci il keypress sul form, ma abilita anche il flag KeyPreview=True sul form!
Abilitando KeyPreview si fa in modo che tutti gli eventi KeyPress relativi ad oggetti dentro il form vengano gestiti dalla KeyPress del form (oltre che dal keypress del singolo oggetto)..

fammi sapere
ciao
Giamp72

gabry90 Profilo | Newbie

non è che ho detto due cose diverse e che semplicemente ho fatto un esempio un po piu semplice del mio problema per chiarire cosa intendevo dire. chiedo cmq scusa per essermi espresso male :)

grazie cmq per la risposta...come dici te funziona.
Grazie mille.

Giamp72 Profilo | Junior Member

L'importante è che tu abbia risolto :-)
ciao e buon lavoro.

PS: ricordati di indicare che il post è risolto.

Giamp72

gabry90 Profilo | Newbie

chiudo
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