PDA

View Full Version : [.NET]&[Win32]Intercettare il momento precedente all'acquisto del Focus


Mezzetti0903
02-10-2004, 20:00
Sto realizzando una tastiera su schermo per una mia applicazione. In pratica essa funzionerà solo all'interno della Form in cui l'ho inserità! (sarà un controllo figlio della form e interagirà solo con controlli figlio di quella stessa form)

Ora la tastiera è costituita da Button...ad esempio [A] [B]
e alla pressione del tasto vorrei che il rispettivo pulsante fosse mandato al controllo selezionato nel momento in cui lo premo.

Ed ecco il problema...come faccio ad inviare la pressione al controllo giusto?

In pratica devo sapere quale controllo sia attivo al momento in cui premo il pulsante.

Io pensavo esistesse un evento che precedesse la perdita definitiva del focus(in modo da scrivermi da qualche parte quale controllo stava perdendo il focus)...ed un altro che precedesse il set del focus sul nuovo controllo(per eseguire il Send del tasto PRIMA che il vecchio controllo avesse perso il focus)..e in effetti la documentazione così mi lasciava supporre, non tanto per quanto scritto qua..

Evento Control.Leave:
Viene generato quando lo stato attivo esce dall'area del controllo.

ma per quello spiegato qua:
Gli eventi di attivazione si verificano nel seguente ordine:
1)Enter
2)GotFocus
3)Leave
4)Validating
5)Validated
6)LostFocus

detta così semprerebbe che se io intercetto l'evento leave del controllo quello non ha ancora "lostfocus"...invece non è così!!

Idee alternative? [managed e non]
(spero non mi proponiate di controllare continuamente con un timer qual è il controllo attivo nel form e scrivermelo da qualche parte perchè mi sembra lento e poco elegante)
(Mi basterebbe :sofico: (magari!) una qualche api GetPreviousActiveControl

Grazie!

Luc@s
10-10-2004, 11:53
up

pela
10-10-2004, 18:42
un'idea Win32 potrebbe essere questa: quando una qualunque casella di testo (controllo edit) acquista il focus, la finestra madre riceve tramite il messaggio WM_COMMAND la notifica EN_SETFOCUS, a questo punto basta salvare l'handle del controllo (contenuto in lparam) in una variabile, che poi verrà letta nel momento in cui si preme il tasto per inserire una lettera