Newsgroup: it.comp.lang.visual-basic
Titolo: (net) keypress

il keypreview e' a true
    Private Sub frmCam_KeyPress(ByVal sender As Object, ByVal e As 
System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        Select Case e.KeyChar.ToString
            Case "s", "S" : ...
            Case Keys.Space.ToString : ...
            Case "+" : ...
            Case "-" : ...
        End Select
    End Sub
perche' + e - li legge, con s|S in genere si' ma qualche colpo lo perde, e 
la barra spazio e' come se non esistesse?
grazie, a.


Uhm... come mai e.KeyChar.ToString?
Prova a togliere il ToString() e scrivere i vari casi come 
Keys.nome_tasto, io col keypress e il keypreview del form non ho mai 
avuto problemi.
S.

andrea palazzi ha scritto:

Prova a lavorare direttamente sui caratteri invece che sulle stringhe:
     Private Sub frmCam_KeyPress(ByVal sender As System.Object, ByVal e 
As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
         Select Case e.KeyChar
             Case "s"c, "S"c : ...
             Case Convert.ToChar(Keys.Space) : ...
             Case "+"c : ...
             Case "-"c : ...
         End Select
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

>            Case "s", "S" : ...
e miuscolo cosa sarebbe? (e.KeyChar)
Una specie di oggetto Environment del vb6?
Grazie
Greg

 e miuscolo cosa sarebbe? (e.KeyChar)
E' una variabile predefinita che contiene un qualche oggetto generato 
dall'evento, e ovviamente dipende dall'evento che lo ha generato.
In questo caso è un oggetto KeyPressEventArgs.


 Una specie di oggetto Environment del vb6?
Così a memoria non ricordo cosa fa l'oggetto Environment. Ho appena 
cambiato pc e devo ancora installare vb6, quindi non ho nemmeno la guida 
per controllare.
Comunque, 'e' è un oggetto della classe KeyPressEventArgs (in questo 
specifico caso, perché in altri può essere di tipo diverso).
KeyPressEventArgs è descritta in dettaglio qui:
http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.aspx
O in italiano qui:
http://msdn.microsoft.com/it-it/library/system.windows.forms.keypresseventargs.aspx
S.
P.S. maledizione... i menu a scomparsa di msdn non funzionano tanto bene 
con Opera  >:|

Prova a togliere il ToString() e scrivere i vari casi come
Keys.nome_tasto, io col keypress e il keypreview del form non ho mai
avuto problemi.
se faccio
Select Case e.KeyChar
Case Keys.Space, Keys.S : SaveNow()
Case Keys.Add : If UD.Value < (UD.Maximum - 15) Then UD.Value += 15
Case Keys.Subtract : If UD.Value > (UD.Minimum - 15) Then UD.Value -= 15
End Select
sottolinea tutti i keys, dicendo che non puo' convertirli in char, e di 
usare la ms.vb, cosa che non vorrei.
se faccio, dopo il convert di vitriol,
Select Case e.KeyChar
Case Convert.ToChar(Keys.Space), Convert.ToChar(Keys.S) : SaveNow()
Case Convert.ToChar(Keys.Add) : If UD.Value < (UD.Maximum - 15) Then 
UD.Value += 15
Case Convert.ToChar(Keys.Subtract) : If UD.Value > (UD.Minimum - 15) Then 
UD.Value -= 15
End Select
non da' nessun errore, pero' oltre al resto non funziona neanche la s/S :)
da qualche parte, cercando "vb net keychar keycode keypreview", diceva che 
alcune cose tipo 'del/canc' vanno gestite con key up/down.
adesso stacco mezz'ora, poi cancello tutti i blocchi e ricomincio da zero. 
dotnet non sa che so essere molto, molto testardo. perfino piu' di un sardo 
:)
ciao, a.

 Una specie di oggetto Environment del vb6?
gli altri te la spiegano meglio.
io, piu' che a environment, pensavo a event.
quindi "che tasto e' stato premuto/abbassato/alzato/mandatoagirare in 
quell'evento".
ciao, a. 

 hmmm. cosi' si perde pure la s/S, va solo +/-
Boh, io ho provato su un form vuoto, e mi funziona. Non so cosa faccio 
di diverso da te...


 usare la ms.vb, cosa che non vorrei.
Perché dovresti usare e.KeyCode, ma credo esista solo nell'evento 
KeyDown e non in KeyPress.


 diverso da te...
anche qui su un progetto nuovo il keypress funziona:
Select Case e.KeyChar
Case "s"c, "S"c : MessageBox.Show("S")
Case Convert.ToChar(Keys.Space) : MessageBox.Show("Space")
Case "+"c : MessageBox.Show("+")
Case "-"c : MessageBox.Show("-")
End Select
e se metto uno stop sul select, li' si ferma.
nel mio form invece, riscritte da 0 -- niente, come se il keypreview non 
esistesse...
ciao, a.


Ma allora anche se imposti un breakpoint da qualche parte sul select 
case non si ferma?
Mi pareva di aver capito che funzionasse "a colpi"...
S.

 esistesse...
Ho provato, e non funziona se il fuoco è su alcuni tipi di controllo 
(es. io ho provato con un RadioButton). Magari dico una sciocchezza, ma 
secondo me dipende dal fatto che l'evento KeyPress viene eseguito dopo 
KeyDown, e magari alcuni controlli intercettano direttamente KeyDown per 
i loro comandi.
A questo punto forse ti conviene usare anche tu KeyDown. Io ho provato 
così, e funziona:
     Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As 
System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
         Select Case e.KeyCode
             Case Keys.S : MessageBox.Show("S")
             Case Keys.Space : MessageBox.Show("Space")
             Case Keys.Oemplus, Keys.Add : MessageBox.Show("+")
             Case Keys.OemMinus, Keys.Subtract : MessageBox.Show("-")
         End Select
Ho usato anche Keys.Oemplus e Keys.OemMinus perché sul mio portatile 
Keys.Add e Keys.Subtract non funzionavano... forse si riferiscono al 
tastierino numerico, ma è da verificare.


 Mi pareva di aver capito che funzionasse "a colpi"...
diciamo 'a scoppio ritardato'. alora, il codice attuale e' questo:
Private Sub frmCam_KeyPress(ByVal sender As Object, ByVal e As 
System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
    MessageBox.Show(sender.ToString)
    MessageBox.Show(e.KeyChar)
    Select Case e.KeyChar
        Case "s"c, "S"c : MessageBox.Show("S")
sto cominciando a capire il comportamento.
appena lanciato il form, non vede il keypreview. premo s -> niente.
se clicco un check, command o qualche controllo, *poi* premo s o la barra, 
funziona, e arrivano i msgbox:
1. javacam2008.frmCam, Text: jCam
2. s (oppure [niente])
3. S (oppure Space)
quindi piu' o meno ci siamo.
adesso vorrei solo capire perche' il keypreview ha bisogno di una dritta per 
cominciare a laura' :)
ciao, a.

 così, e funziona:
rigrazie anche a te per la pazienza. ho commentato keypress, poi 
copincollato il codice, solo mettendolo nel keyup, perche' antichi ricordi 
in vb6 mi sembra consigliassero di controllare l'azione alla fine.
funziona, ma se hai visto l'altro post, solo se prima ho cliccato un 
qualunque controllo.
a pensarci, un comportamento simile mi sembra l'avessi anche nella versione 
vb6, da cui questa ha preso lo spunto per provare un po' del linguaggio 
facendo cose facili.
sul form c'e' un webbrowser, che mostra la webcam in tutta l'area non 
occupata dagli altri controlli. mi viene il dubbio che, nonostante il 
me.focus alla fine del load, il wb all'inizio intercetti la tastiera.
oemplus e minus le avevo viste e provate quando sembrava non andare. ora 
vanno, con una tastiera normale, sia nella tastiera sia nel tastierino.
ciao, a.

 qualunque controllo.
E se provi in KeyDown, facendo finta di aver dimenticato gli antichi 
ricordi, cosa succede? Per curiosità.


 ricordi, cosa succede? Per curiosità.
mai discutere con un chimico, specie se si chiama vitriol.
ricordarsi sempre che tu no, ma lui sa fare la dinamite.
succede uguale, uomo di poca fede :)
dato che i controlli cliccabili sono una decina, li sto provando tutti.
e se dopo il load clicco il famoso cboPosition con le immagini, il 
keypreview continua a non funzionare.
se invece clicco un check o un command normali, prende ad andare.
ciao, a.

 succede uguale, uomo di poca fede :)
LOL
Boh, non so cosa dirti. Sarà di sicuro qualche gabola coi controlli, ma 
non riesco a riprodurre la situazione.


 grazie, a.
dunque...form chiamata frmTest
aggiunto
un listbox ed un textbox
poi...
Public Class frmTest
Dim t As Integer = 0
Private Sub frmTest_KeyDown(ByVal sender As Object, ByVal e As 
System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
ListBox1.Items.Add(e.KeyCode)
Select Case e.KeyCode
Case Keys.Enter
t += 10
Case Keys.Multiply
t *= 2
Case Keys.Add
t += 2
Case Keys.Subtract
t -= 2
Case Keys.Space
t += 1
End Select
TextBox1.Text = t.ToString
e.Handled = False
End Sub
End Class
...a me non perde nulla!!!
Prova e sappimi dire!!!
...e cliccate su
http://wodka40hall.myminicity.com/
che si cominciano ad asfaltare le strade!!!
:o)
-----------------------------
Mio Blog
http://www.martek.it/dblog/default.asp
Mia cittŕ
http://wodka40hall.myminicity.com/
****
In evidenza questa settimana
http://www.martek.it/dblog/articolo.asp?articolo=112
 

 :o)
mammamia, appena arrivato al governo e gia' palazzinaro :)
in un caso simile, avevo scritto come test un vb6 con un array di 60 
webbrowser che cliccavano ogni timer_tick, a piacere. il mio pc ansimava, ma 
i miei candidati hanno figurato molto, molto bene :)
qui pero' dice 1 al giorno, mi sa controlli l'ip, quindi non posso aiutarti 
piu' che tanto.
poi, notoriamente, in net, le matrici di controlli... :)
ciao, a.

zac
boh...impaciugato?
mi sembra abbastaza robusto per impaciugarsi!
Hai messo in fondo
e.Handled = False
???
probabilmente se il paciugo è "forte"
prova a nmetterlo a true e vedere cosa smette di funzionare!