Klavye Girdisi Nasıl Çalışır
Windows Formlar, farklı iletilerin yanıt olarak klavye olaylarını Windows işlemler. Çoğu Windows Forms uygulaması, klavye olaylarını işerek klavye girişini özel olarak işlemeye devam eder. Ancak, klavye iletilerinin nasıl çalışdığını anlamanız gerekir. Böylece, tuşlar bir denetime ulaşmadan önce araya girilme gibi daha gelişmiş klavye girişi senaryolarını uygulayabilirsiniz. Bu konuda, Formlar'ın tanıması Windows veri türleri açıklanmıştır ve klavye iletilerinin nasıl yönlendirildiklerinin genel bir bakışını sağlar. Klavye olayları hakkında bilgi için bkz. Klavye Olaylarını Kullanma.
Anahtar Türleri
Windows Formlar, klavye girişini bitwise numaralama ile temsil edilen sanal anahtar Keys kodları olarak tanımlar. Numaralama ile, tek bir değer elde etmek için bir Keys dizi basılmış tuş birleştirin. Bu değerler, verilerle birlikte gelen ve ileti WM_KEYDOWN WM_SYSKEYDOWN Windows karşılık gelen değerlerdir. veya olaylarını işerek çoğu fiziksel tuş basa basan tuşa basın. KeyDown KeyUp Karakter anahtarları, enumerasyonun bir alt kümesidir ve bu değerlerle birlikte gelen WM_CHAR Keys ve WM_SYSCHAR Windows verir. Basılmış tuşların birleşimi bir karakterle sonuçlanabilirse, olayı işerek karakteri KeyPress algılay olur. Alternatif olarak, hangi tuşlara basıldığından ve Visual Basic programlama arabirimi tarafından ortaya Keyboard çıkarılmış olan 'i kullanabilirsiniz. Daha fazla bilgi için bkz. Klavyeye Erişme.
Klavye Olaylarının Sırası
Daha önce belirtildiği gibi, bir denetimde meydana gelen 3 klavyeyle ilgili olay vardır. Aşağıdaki dizi olayların genel sırasını gösterir:
Kullanıcı "a" anahtarını iletir, anahtar önceden işlenmeli, gönderildi ve bir KeyDown olay oluşur.
Kullanıcı "a" anahtarını tutar, anahtar önceden işlenmeli, gönderildi ve bir KeyPress olay oluşur.
Kullanıcı bir anahtarı tutarken bu olay birden çok kez gerçekleşir.
Kullanıcı "a" anahtarını serbest bıraktır, anahtar önceden işlenmeli, gönderildi ve bir KeyUp olay oluşur.
Önişlem Anahtarları
Diğer iletiler gibi klavye iletileri de bir WndProc formun veya denetimin yönteminde işlenir. Ancak, klavye iletileri işlenmeden önce yöntemi, özel karakter anahtarlarını ve fiziksel anahtarları işlemek için geçersiz kılınabilir bir PreProcessMessage veya daha fazla yöntemi çağırır. İletiler denetim tarafından işlenmeden önce belirli anahtarları algılamak ve filtrelemek için bu yöntemleri geçersiz kılabilirsiniz. Aşağıdaki tabloda, gerçekleştirilecek eylem ve yöntemin oluşma sırasına göre oluşan ilgili yöntem yer almaktadır.
KeyDown olayı için ön işleme
| Eylem | İlgili yöntem | Notlar |
|---|---|---|
| Hızlandırıcı veya menü kısayolu gibi bir komut anahtarını kontrol edin. | ProcessCmdKey | Bu yöntem, normal anahtarlara göre öncelikli olan bir komut anahtarını işler. Bu yöntem true döndürürse, anahtar iletisi gönderlanmaz ve bir anahtar olayı oluşmaz. döndürürse false IsInputKey çağrılır. |
| Ön işleme gerektiren özel bir anahtar veya bir olayı yükselterek bir denetime göndererek normal KeyDown bir karakter anahtarı olup ola bir kontrol edin. | IsInputKey | yöntemi true döndürürse, denetimin normal bir karakter olduğu ve bir olayın KeyDown ortaya çıkar olduğu anlamına gelir. ise, false ProcessDialogKey çağrılır. Not: Bir denetimin bir anahtar veya anahtar bileşimini alalı olduğundan emin olmak için, olayı işebilir ve istediğiniz anahtar veya anahtarlar için olarak PreviewKeyDown IsInputKey olarak PreviewKeyDownEventArgs true ayarlanmıştır. |
| Gezinti tuşunu (ESC, SEKME, Dönüş veya ok tuşları) kontrol edin. | ProcessDialogKey | Bu yöntem, denetim ve üst öğe arasında odağı değiştirme gibi denetim içinde özel işlevlerden biri olan fiziksel bir anahtarı işler. Anlık denetim anahtarı işlemezse, üst denetimde çağrılır ve hiyerarşideki en ProcessDialogKey üstteki denetime çağrılır. Bu yöntem true döndürürse, ön işleme tamamlanır ve bir anahtar olayı oluşturulmaz. döndürürse false bir KeyDown olay oluşur. |
KeyPress Olayı için ön işleme
| Eylem | İlgili yöntem | Notlar |
|---|---|---|
| Anahtarın denetim tarafından işlenmesi gereken normal bir karakter olup olduğunu kontrol edin | IsInputChar | Karakter normal bir karakterse, bu yöntem true döndürür, KeyPress olay oluşur ve başka bir ön işleme oluşmaz. Aksi ProcessDialogChar takdirde çağrılır. |
| Karakterin bir mnemonic olup &kontrol edin (&Tamam gibi) | ProcessDialogChar | ile benzer şekilde bu ProcessDialogKey yöntem denetim hiyerarşisi olarak çağrılır. Denetim bir kapsayıcı denetimi ise, kendisi ve alt denetimlerini çağırarak mnemonics'i ProcessMnemonic denetler. ProcessDialogChar true döndürürse, KeyPress bir olay oluşmaz. |
Klavye İletilerini İşleme
Klavye iletileri bir formun veya denetimin yöntemine ulaştıktan sonra, geçersiz WndProc kılınabilir bir yöntem kümesi tarafından işlenir. Bu yöntemlerin her biri, klavye Boolean iletinin denetim tarafından işlenmiş ve kullanılan olup olmadığını belirten bir değer döndürür. Yöntemlerden biri döndürürse, ileti işli olarak kabul edilir ve daha fazla işleme için denetimin tabanına veya true üst öğesine geçirlanmaz. Aksi takdirde, ileti ileti kuyruğunda kalır ve denetimin temel veya üst öğesinde başka bir yöntemde işlenebilir. Aşağıdaki tabloda klavye iletilerini işleme yöntemleri yer almaktadır.
| Yöntem | Notlar |
|---|---|
| ProcessKeyMessage | Bu yöntem, denetimin yöntemi tarafından alınan tüm WndProc klavye iletilerini işler. |
| ProcessKeyPreview | Bu yöntem, klavye iletiyi denetimin üst öğesine gönderir. ProcessKeyPreview true döndürürse, anahtar olayı oluşturulmaz, aksi takdirde ProcessKeyEventArgs çağrılır. |
| ProcessKeyEventArgs | Bu yöntem , KeyDown ve KeyPress KeyUp olaylarını uygun şekilde yükselter. |
Klavye Yöntemlerini Geçersiz Kılma
Bir klavye iletisi önceden işlendiğinde ve işlendiğinde geçersiz kılınabilir birçok yöntem vardır; ancak, bazı yöntemler diğerlerine göre çok daha iyi seçeneklerdir. Aşağıdaki tabloda, gerçekleştirmek istediğiniz görevler ve klavye yöntemlerini geçersiz kılmanın en iyi yolu yer almaktadır. Yöntemleri geçersiz kılma hakkında daha fazla bilgi için bkz. Türetilmiş sınıflarda özellikleri ve yöntemleri geçersiz kılma.
| Görev | Yöntem |
|---|---|
| Bir gezinti anahtarını kesme ve bir olay KeyDown yükseltme. Örneğin, SEKME ve Return'in bir metin kutusunda işlensin. | geçersiz IsInputKey kılın. Not: Alternatif olarak, olayı işebilir PreviewKeyDown ve istediğiniz anahtar veya anahtarlar için olarak IsInputKey PreviewKeyDownEventArgs true ayarlanmıştır. |
| Denetimde özel giriş veya gezinti işleme gerçekleştirin. Örneğin, seçilen öğeyi değiştirmek için liste denetiminde ok tuşlarının kullanımının gerekir. | Geçersiz kılma ProcessDialogKey |
| Bir gezinti anahtarını kesme ve bir olay KeyPress yükseltme. Örneğin, bir spin-box denetiminde öğelerin ilerlemesini hızlandırmak için birden çok ok tuşuna basması gerekir. | geçersiz IsInputChar kılın. |
| Bir olay sırasında özel giriş veya gezinti işleme KeyPress gerçekleştirin. Örneğin, "r" anahtarını tutan bir liste denetiminde, r harfiyle başlayan öğeler arasında atlar. | Geçersiz kılma ProcessDialogChar |
| Özel mnemonik işleme gerçekleştirme; Örneğin, bir araç çubuğunda bulunan sahip tarafından çizilen düğmelerde mnemonics işlemek istiyorsanız. | geçersiz ProcessMnemonic kılın. |