değiştirici tuşa basma şeklini denetleme (Windows Forms .net)

Kullanıcı uygulamanıza anahtarlar yazdığında, SHIFT, altve CTRLgibi basılan değiştirici tuşları izleyebilirsiniz. Değiştirici tuşa diğer anahtarlarla birlikte basıldığında, hatta fare tıklaması durumunda uygulamanız uygun şekilde yanıt verebilir. Örneğin, S tuşuna basmak ekranda "S" görünmesine neden olabilir. CTRL + S tuşlarına basıldığında, bunun yerine geçerli belge kaydedilmiş olabilir.

Önemli

.NET 6 ve .NET 5 için masaüstü Kılavuzu belgeleri (.NET Core 3,1 dahil) yapım aşamasındadır.

Olayı işleyiniz KeyDown , KeyEventArgs.Modifiers olay işleyicisi tarafından alınan özellik hangi değiştirici tuşlarına basılanı belirtir. Ayrıca özelliği, KeyEventArgs.KeyData bir bit DÜZEYINDE veya ile Birleşik değiştirici anahtarlarla birlikte basılan karakteri belirtir.

KeyPressOlayı veya fare olayını işliyoruz, olay işleyicisi bu bilgileri almaz. ModifierKeysControl Anahtar değiştiricisini algılamak için sınıfının özelliğini kullanın. Her iki durumda da, uygun değeri ve test ettiğiniz değeri bir bit düzeyinde ve yapmanız gerekir Keys . KeysSabit listesi her bir değiştirici anahtarın varyasyonlarını sunar, bu nedenle bit düzeyinde YAPMANıZ ve doğru değerle kontrol etmeniz önemlidir.

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

Değiştirici anahtar olarak SHIFT 'i test etmek için doğru değer . Benzer şekilde, CTRL ve alt tuşlarını değiştiriciler olarak test etmek için sırasıyla ve değerlerini kullanmanız gerekir .

Değiştirici anahtarını Algıla

ModifierKeysÖzelliği ve Keys numaralandırma değerini BIT düzeyinde ve işleçle karşılaştırarak bir değiştirici tuşa basıldığını algıla.

Aşağıdaki kod örneği, ve olay işleyicileri içinde SHIFT tuşuna basılmasının nasıl belirleneceğini göstermektedir KeyDown .

// 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.