Değiştirici tuş basmalarını denetleme (Windows Forms .NET)

Kullanıcı uygulamanıza tuş yazarken SHIFT, ALT ve CTRL gibi basılı değiştirici tuşları izleyebilirsiniz. Değiştirici tuşa diğer tuşlarla veya fare tıklamasıyla birlikte basıldığında, uygulamanız uygun şekilde yanıt verebilir. Örneğin, S tuşuna basmak ekranda bir "s" gösterilmesine neden olabilir. Bunun yerine CTRL+S tuşlarına basılırsa geçerli belge kaydedilebilir.

Olayı işlerseniz KeyDown , KeyEventArgs.Modifiers olay işleyicisi tarafından alınan özellik hangi değiştirici tuşlara basıldığını belirtir. Ayrıca özelliği, KeyEventArgs.KeyData bit düzeyinde OR ile birleştirilen tüm değiştirici tuşlarla birlikte basılan karakteri belirtir.

Olayı veya fare olayını işlerseniz KeyPress , olay işleyicisi bu bilgileri almaz. ModifierKeys Bir anahtar değiştirici algılamak Control için sınıfının özelliğini kullanın. Her iki durumda da, bit düzeyinde ve uygun Keys değeri ve test ettiğiniz değeri gerçekleştirmeniz gerekir. Numaralandırma Keys , her değiştirici anahtarın çeşitlemelerini sunar, bu nedenle bit düzeyinde yapmanız ve doğru değerle denetlemeniz önemlidir.

Örneğin, SHIFT tuşu aşağıdaki anahtar değerleriyle temsil edilir:

SHIFT'i değiştirici anahtar olarak test etmek için doğru değerdirKeys.Shift. Benzer şekilde, CTRL ve ALT değerlerini değiştirici olarak test etmek için sırasıyla ve Keys.Alt değerlerini kullanmanız Keys.Control gerekir.

Değiştirici anahtarı algılama

Özelliği ve Keys numaralandırma değerini bit düzeyinde AND işleciyle karşılaştırarak ModifierKeys değiştirici tuşuna basılıp basılamadığını algılayın.

Aşağıdaki kod örneği, VE KeyDown olay işleyicileri içinde KeyPress SHIFT tuşuna basılıp basılmadığının nasıl belirleneceğini gösterir.

// Event only raised when non-modifier key is pressed
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyPress " + Keys.Shift);
}

// Event raised as soon as shift is pressed
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyDown " + Keys.Shift);
}
' Event only raised when non-modifier key is pressed
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

' Event raised as soon as shift is pressed
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

Ayrıca bkz.