ComboBox e tasti Up e Down

martedì 28 agosto 2007 - 17.14

Enzo_LT Profilo | Newbie

Salve, ho fatto un form di inserimento dati e tra le varie TextBox ci sono 4 ComboBox che all'occasione attivo come inserimento dati, e per comodità di inserimeto dati da tastiera gestisco con una routine comune i tasti Invio,Esc,Up e Down questi ultimi per navigare.
Qui nasce il mio problema, quando mi trovo su una ComboBox e premo il tasto Up o Down per cambiare Campo di inserimento funziona ma mi cambia anche la selezione della lista contenuta nel ComboBox.
Vorrei mantenere questo modo di navigare con la tastiera quindi chiedo se è possibile disattivare la selezione del ComboBox con i tasti Up e Down.

Grazie.

SSUPERPIPPO Profilo | Guru

Non credo sia fattibile, l'escamotage potrebbe essere quella che, in uscita dal campo combobox in seguito a pressione di tasto Up o Down, tu sposti la selezione via codice al record precedente/successivo in modo da riposizionarlo nella posizione originale.

Non so se mi sono spiegato, prova e fammi sapere

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

Faelar Profilo | Junior Member

Non sono sicuro di aver capito bene il problema, ma perché non provi ad usare l'evento KeyDown?

In questo modo puoi intercettare la pressione del tasto, fare ciò che ti serve, e poi disabilitarne la gestione di windows.


Ti scrivo un piccolo esempio in VB .NET:

Private Sub ComboBox_KeyDown(ByVal sender As Object, ByVal e As System....) Handles omboBox.KeyDown
If (e.KeyCode = Keys.Down) Then
e.SuppressKeyPress = True 'Disabilita la gestione di Windows
End If
End Sub



Se non è chiaro o non ho capito nulla dimmi pure.


Ciao

Enzo_LT Profilo | Newbie


Grazie, è proprio quello che mi serviva.

Visto che ci siamo non è che Hai un consiglio per emulare le control array (tipo VB6) o almeno come avanzare alla control successiva premendo il tasto Enter.

In parte ho risolto assegnando alla proprietà TAG di ogni control che uso come input da tastera un numero progressivo.

Ti mostro la routine:

Private Sub procedura_evento_Key(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Dati_01.KeyUp, Dati_02.KeyUp, Dati_03.KeyUp, Dati_04.KeyUp, Dati_05.KeyUp, Dati_06.KeyUp, Dati_07.KeyUp, Dati_08.KeyUp, Dati_09.KeyUp, Dati_10.KeyUp, Dati_11.KeyUp, Dati_12.KeyUp, Dati_13.KeyUp, Dati_14.KeyUp, Dati_15.KeyUp, Dati_17.KeyUp, Dati_18.KeyUp, Dati_17.KeyUp, Dati_18.KeyUp, Dati_14.KeyUp

Dim IndexControl As Byte = 0
If e.KeyCode = Keys.Enter And CType(sender, Control).Text <> "" Then IndexControl = Val(CType(sender, Control).Tag) + 1
If e.KeyCode = Keys.Up Then IndexControl = Val(CType(sender, Control).Tag) - 1
If e.KeyCode = Keys.Down Then IndexControl = Val(CType(sender, Control).Tag) + 1
If e.Alt Or e.Shift Then IndexControl = 0

If IndexControl > 0 Then
For Each ctl As Control In Me.Controls
Dim a As Byte = Val(ctl.Tag)
If a = IndexControl Then
ctl.Focus()
End If
Next ctl
End If

End Sub

Cosi com'è funziona però se c'è un modo più semplice è meglio.

Grazie, comunque Ho risolto.

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