Intercettare KeyPress su DataGrid

lunedì 25 luglio 2005 - 14.57

fabcri Profilo | Newbie

Salve, ho un datagrid con "TableStyle". Vorrei intercettare l'evento keypress del tasto invio su una particolare colonna, ma non riesco a frlo. Con il controllo textBox funziona,
sapete dirmi perchè ?

Cteniza Profilo | Guru

Dovresti ereditare la datagrid in una tua classe dove gestisci l'evento (naturalmente dopo dovrai mettere il nuovo controllo a video)

Esempio:
public class MyGrid : System.Windows.Forms.DataGrid
{
private const int WM_KEYDOWN = 0x100;
private const int WM_KEYUP = 0x101;
protected override bool ProcessKeyPreview(ref System.Windows.Forms.Message m)
{
Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode;
if((m.Msg == WM_KEYDOWN || m.Msg == WM_KEYUP)
&& keyCode == Keys.Enter )
{
MessageBox.Show("Beccato");
return false;
}
return true;
}


fabcri Profilo | Newbie

Ho creato un controllo come dici, funziona, ma ho un problemino.
Devo decidere cosa fare digitando il tasto dal codice della mia applicazione, e non dal controllo. In poche parole ho inserito il nuovo controllo e qualunque tasto premo ottengo la finestra beccato!!.
Come devo procedere ?

fabcri

Cteniza Profilo | Guru

>Devo decidere cosa fare digitando il tasto dal codice della mia
>applicazione, e non dal controllo.
Se non vuoi gestire lì il tasto enter prova a restituire un evento, implementa il gestore e aggiungi l'evento sulla grid della form

In poche parole ho inserito
>il nuovo controllo e qualunque tasto premo ottengo la finestra
>beccato!!.

Non è che dici il falso, dici solamente cose non vere :)).

Visto che mi hai incuriosito perchè mi sembrava impossibile quello che dicevi, ho provato ad aggiungere un campo textbox sulla mia form di prova e a vedere se il "beccato" usciva sempre.
Esce solo se premi enter su una cella del datagrid (cvd).

Visto che una prova fisica vale di più della sola parola allego il progettino scritto con SharpDevelop (per inserirla su VS2003 basta sostituire la form principale con quella allegata).



fabcri Profilo | Newbie

Scusa se sono stato poco chiaro nella risposta precedente. Io avevo creato un controllo "MyDataGrid" con il codice che mi hai postato, e funzionava allo stesso modo dell'allegato precedente.
I problemi non stanno nel codice, ma in quello che devo ottenere. Es. devo avere un datagrid dove posso muovermi con i tasti freccia, dare invio e nel momento in cui digito invio leggere il valore della cella selezionata, fare delle operazioni nel database ecc.
Di conseguenza ho provato come dici a creare il controllo "MyDataGrid". Nel nuovo controllo "MyDataGrid" devo avere un nuovo evento nella lista degli eventi.
L'perazione che deve avvenire deve essere decisa dall'applicazione e non dal controllo della libreria. Puoi chiarirmi meglio quest'aspetto ?
Ti ringrazio in anticipo per il tuo aiuto.

P.S. Ho visto che usi SharopDevelop, anche io ne faccio uso.
Ti volevo chiedere se hai riscontrato dei problemi con il "TabControl" e datagrid al suo interno in fase di creazione del form ?



fabcri

fabcri Profilo | Newbie

P.S. Altra cosa, in questo modo i tasti freccia funzionano ?

fabcri

fabcri Profilo | Newbie

Qualcuno mi aiuti........ Maledetta Datagrid di .net .........

Ho provato a fare:

protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if(keyData == Keys.F1)
{
MessageBox.Show("F1");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

Adesso riesco ad intercettare il tasto F1 e i tasti freccia funzionano.
Adesso il mio problema è:

Dalla mia form in cui uso il nuovo controllo, voglio che schiacciando il tasto "F1" il datagrid scompaia !
Si puo' fare ?

fabcri
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