Засичане на Ctrl+/Ctrl-

2 отговора 0 прегледа
#1

Засичане на Ctrl+/Ctrl-

Имам програма на VB2005, която засича натискане и задържане на Shift.
При натискане на "+" (плюс), се увеличава една стойност със 1-ца.
При натиснат Shift, тоест Shift+"+", се увеличава стойността със 10.

Същото за "-" (минус), една стойност се намалява със 1-ца.
При натиснат Shift, тоест Shift+"-", се намалява стойността със 10.

Искам при натискане на Ctrl+"+" да се увеличи със 100, съответно да намалее със 100 при Ctrl+"-". Но при натискане на Ctrl+"+" и Ctrl+"-", не става нищо - въобще не се вика event handler-a за KeyPress...
Къде бъркам?

Ето и кода:
* формата има KeyPreview=True.
* имам глобални за формата променливи boolShift и boolCtrl.


Private Sub frmMain_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.ShiftKey Then
boolShift = True
lblShift.Text = "SHIFT"
End If

If e.KeyCode = Keys.ControlKey Then
boolCtrl = True
lblCtrl.Text = "CTRL"
End If

End Sub

Private Sub frmMain_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
If e.KeyCode = Keys.ShiftKey Then
boolShift = False
lblShift.Text = ""
End If

If e.KeyCode = Keys.ControlKey Then
boolCtrl = False
lblCtrl.Text = ""
End If

' MsgBox("Upp...")
End Sub

Private Sub frmMain_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
If boolShift And boolCtrl Then
MsgBox("Both Shift and Ctrl pressed!")
Exit Sub
End If


If e.KeyChar = "+" Then
e.Handled = True
If boolShift = False Then
If boolCtrl = False Then
If curPoint < numPoints - 1 Then
curPoint += 1
Else
Beep()
End If
Else
If curPoint < numPoints - 100 Then
curPoint += 100
Else
Beep()
End If
End If
Else
If curPoint < numPoints - 10 Then
curPoint += 10
Else
Beep()
End If
End If
UpdateCurPoint()
ElseIf e.KeyChar = "-" Then
e.Handled = True
If boolShift = False Then
If boolCtrl = False Then
If curPoint > 0 Then
curPoint -= 1
Else
Beep()
End If
Else
If curPoint >= 100 Then
curPoint -= 100
Else
Beep()
End If
End If
Else
If curPoint >= 10 Then
curPoint -= 10
Else
Beep()
End If
End If
UpdateCurPoint()
End If
End Sub




Редактирано от naki на

Отговор
в отговор на naki #2

Re: Засичане на Ctrl+/Ctrl-

KeyPress се вика само от клавишната комбинация успешно се "преведе" в ASCII код. Примерно Shift+- e _ (underscrore), докато Alt+PgUp няма ASCII код и няма какво да се сложи в KeyChar на KeyPressEventArgs.

cheers,
</wqw>


[линк]
Отговор
в отговор на wqw #3

Re: Засичане на Ctrl+/Ctrl-

Благодаря за отговора.

Реших проблема с добавяне на меню. Точно тази програма няма меню, така че добавих меню, което е невидимо (Visible=true). Сложих 2 menu items, които да се викат при натискане на Ctrl+"-" и Ctrl+"+" (и по-точно Ctrl+Oemplus/Ctrl+Oemminus).

Всичко работи, но действат само + и -, които са над буквите, не и тези които са отдясно в цифровия блок, но и така е ОК...

Да, наложи се да променя кода на
If e.KeyChar = "=" Or e.KeyChar = "+" Then
както и
ElseIf e.KeyChar = "-" Or e.KeyChar = "_" Then,
за да работи и при натиснат Shift...


Отговор