Засичане на Ctrl+/Ctrl-
2 отговора
0 прегледа
Засичане на 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.
При натискане на "+" (плюс), се увеличава една стойност със 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 на
Re: Засичане на Ctrl+/Ctrl-
KeyPress се вика само от клавишната комбинация успешно се "преведе" в ASCII код. Примерно Shift+- e _ (underscrore), докато Alt+PgUp няма ASCII код и няма какво да се сложи в KeyChar на KeyPressEventArgs.
cheers,
</wqw>
[линк]
cheers,
</wqw>
[линк]
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...
Реших проблема с добавяне на меню. Точно тази програма няма меню, така че добавих меню, което е невидимо (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...