Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows Forms'da,
Klavye olayları
Tüm Windows Forms denetimleri, fare ve klavye girişiyle ilgili bir dizi olayı devralır. Örneğin, bir denetim, KeyPress olayını işleyerek basılan bir tuşun karakter kodunu belirleyebilir. Daha fazla bilgi için bkz. Klavye olaylarını kullanma.
Kullanıcı giriş iletilerini işleyen yöntemler
Formlar ve denetimler, IMessageFilter arabirimine ve windows iletilerini ileti kuyruğunun farklı noktalarında işleyen bir dizi geçersiz kılınabilir yönteme erişebilir. Bu yöntemlerin tümü, Windows iletilerinin alt düzey ayrıntılarını kapsülleyen bir Message parametresine sahiptir. İletiyi incelemek ve ardından iletiyi kullanmak veya ileti kuyruğundaki bir sonraki tüketiciye geçirmek için bu yöntemleri uygulayabilir veya geçersiz kılabilirsiniz. Aşağıdaki tabloda, Windows Forms'daki tüm Windows iletilerini işleyen yöntemler gösterilir.
| Yöntem | Notlar |
|---|---|
| PreFilterMessage | Bu yöntem, uygulama düzeyinde kuyruğa alınan (gönderilen olarak da bilinir) Windows iletilerini durdurur. |
| PreProcessMessage | Bu yöntem, Windows iletilerini işlenmeden önce form ve denetim düzeyinde durdurur. |
| WndProc | Bu yöntem, Windows iletilerini form ve denetim düzeyinde işler. |
| DefWndProc | Bu yöntem, Windows iletilerinin form ve denetim düzeyinde varsayılan işlemesini gerçekleştirir. Bu, bir pencerenin en düşük işlevselliğini sağlar. |
| OnNotifyMessage | Bu yöntem, iletileri işlendikten sonra form ve denetim düzeyinde durdurur. Bu yöntemin çağrılabilmesi için EnableNotifyMessage stil biti ayarlanmalıdır. |
Klavye ve fare iletileri, bu tür iletilere özgü ek bir geçersiz kılınabilir yöntem kümesi tarafından işlenir. Daha fazla bilgi için ön işleme anahtarları bölümüne bakın.
Anahtar türleri
Windows Forms, klavye girişini bit düzeyinde Keys sabit listesiyle temsil edilen sanal anahtar kodları olarak tanımlar. Enumerasyon Keys ile, bir dizi tuşun basılmasını tek bir değere dönüştürebilirsiniz. Bu değerler, WM_KEYDOWN ve WM_SYSKEYDOWN Windows iletilerine eşlik eden değerlere karşılık gelir. Çoğu fiziksel tuş basımını KeyDown veya KeyUp olaylarını işleyerek algılayabilirsiniz. Karakter anahtarları, numaralandırmanın Keys bir alt kümesidir ve WM_CHAR veWM_SYSCHAR Windows iletilerine eşlik eden değerlere karşılık gelir. Basılan tuşların birleşimi bir karakterle sonuçlanırsa, KeyPress olayını ele alarak karakteri algılayabilirsiniz. Alternatif olarak, Visual Basic programlama arabirimi tarafından kullanıma sunulan Keyboard'yi kullanarak hangi tuşlara basıldığını bulabilir ve tuş gönderebilirsiniz. Daha fazla bilgi için bkz . Klavyeye Erişme (Visual Basic).
Klavye olaylarının sırası
Daha önce listelendiği gibi, bir denetimde klavyeyle ilgili üç olay gerçekleşebilir. Aşağıdaki sıra, olayların genel sırasını gösterir:
- Kullanıcı A anahtarını iter, anahtar önceden işlenir, gönderilir ve bir KeyDown olay gerçekleşir.
- Kullanıcı A anahtarını tutar, anahtar önceden işlenir, gönderilir ve bir KeyPress olay oluşur. Kullanıcı bir anahtarı barındırdıkça bu olay birden çok kez gerçekleşir.
- Kullanıcı A anahtarını serbest bırakır, anahtar önceden işlenir, gönderilir ve bir KeyUp olay oluşur.
Anahtarları işleme öncesi hazırlık
Diğer iletiler gibi, klavye iletileri de bir form veya denetim yönteminde WndProc işlenir. Ancak, klavye iletileri işlenmeden önce, PreProcessMessage yöntemi özel karakter tuşlarını ve fiziksel tuşları işlemek için geçersiz kılınabilecek bir veya daha fazla yöntemi çağırır. Denetim iletileri işlemeden önce belirli anahtarları algılamak ve filtrelemek için bu yöntemleri geçersiz kılabilirsiniz. Aşağıdaki tabloda, gerçekleştirilen eylem ve gerçekleşen ilgili yöntem, yöntemin gerçekleştiği sırayla gösterilir.
KeyDown olayının ön işlenmesi
| Eylem | İlgili yöntem | Notlar |
|---|---|---|
| Hızlandırıcı veya menü kısayolu gibi bir komut tuşunu denetleyin. | ProcessCmdKey | Bu yöntem, normal anahtarlardan öncelikli olan bir komut anahtarını işler. Bu yöntem döndürürse true, anahtar iletisi gönderilmez ve anahtar olayı gerçekleşmez. Eğer false dönerse, IsInputKey çağrılır. |
| Ön işleme gerektiren özel bir anahtar veya bir olayı tetikleyip bir denetime dağıtılması gereken normal bir KeyDown karakter anahtarı olup olmadığını denetleyin. | IsInputKey | Yöntem true döndürürse, denetimin normal bir karakter olduğu ve bir KeyDown olayı tetiklenir anlamına gelir. Eğer false olursa, ProcessDialogKey çağrılır.
Not: Bir denetimin bir tuş veya tuş kombinasyonu almasını sağlamak için PreviewKeyDown olayını işleyebilir ve istediğiniz tuş veya tuşlar için IsInputKey öğesinin PreviewKeyDownEventArgs değerini true olarak ayarlayabilirsiniz. |
| Gezinti tuşunu (ESC, SEKME, Return veya ok tuşları) denetleyin. | ProcessDialogKey | Bu yöntem, kontrol içinde, odaklanmayı kontrol ve üst öğesi arasında değiştirmek gibi özellikli fonksiyonlar kullanan bir fiziksel anahtarı işler. Anlık kontrol anahtarı işlemezse, ProcessDialogKey ebeveyn kontrol üzerinde çağrılır ve bu işlem hiyerarşinin tepesindeki kontrol dahil oluncaya kadar devam eder. Bu yöntem döndürürse true, ön işleme tamamlanır ve bir anahtar olay oluşturulmaz. "false döndürülürse, 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 olmadığını denetleyin | IsInputChar | Karakter normal bir karakterse, bu yöntem true değerini döndürür, KeyPress olayı tetiklenir ve başka ön işleme gerçekleşmez. Aksi takdirde ProcessDialogChar çağrılır. |
| Karakterin anımsatıcı olup olmadığını denetleyin (düğmedeki &Tamam gibi) | ProcessDialogChar |
ProcessDialogKey gibi bu yöntem, denetim hiyerarşisinde çağrılır. Denetim bir kapsayıcı denetimiyse, kendisini ve alt denetimlerini çağırarak ProcessMnemonic anımsatıcıları denetler. Eğer ProcessDialogChartrue döndürürse, bir KeyPress olay gerçekleşmez. |
Klavye iletilerini işleme
Klavye iletileri bir form veya denetimin yöntemine WndProc ulaştıktan sonra geçersiz kılınabilecek bir dizi yöntem tarafından işlenir. Bu yöntemlerin her biri, klavye mesajının kontrol tarafından işlenip işlenmediğini ve tüketilip tüketilmediğini belirten bir Boolean değeri döndürür. Eğer yöntemlerden biri true döndürürse, ileti işlenmiş kabul edilir ve kontrolün tabanı veya üst öğesi için daha fazla işleme geçirilmez. Aksi takdirde, ileti ileti kuyruğunda kalır ve denetimin tabanında veya üst öğesinde başka bir yöntemde işlenebilir. Aşağıdaki tabloda klavye iletilerini işleyen yöntemler gösterilir.
| Yöntem | Notlar |
|---|---|
| ProcessKeyMessage | Bu yöntem, denetimin yöntemi tarafından WndProc alınan tüm klavye iletilerini işler. |
| ProcessKeyPreview | Bu yöntem, klavye iletisini denetimin ebeveynine gönderir. Eğer ProcessKeyPreviewtrue döndürürse, hiçbir anahtar olayı oluşturulmaz, aksi takdirde ProcessKeyEventArgs çağrılır. |
| ProcessKeyEventArgs | Bu yöntem, uygun şekilde KeyDown, KeyPress ve KeyUp olaylarını tetikler. |
Klavye yöntemlerini geçersiz kılma
Klavye iletisi önceden işlendiğinde ve işlendiğinde geçersiz kılınabilecek birçok yöntem vardır; ancak bazı yöntemler diğerlerinden daha iyi seçeneklerdir. Aşağıdaki tabloda gerçekleştirmek isteyebileceğiniz görevler ve klavye yöntemlerini geçersiz kılmanın en iyi yolu gösterilmektedir. Yöntemleri geçersiz kılma hakkında daha fazla bilgi için bkz . Devralma (C# Programlama Kılavuzu) veya Devralma (Visual Basic)
| Görev | Yöntem |
|---|---|
| Bir navigasyon tuşunun yolunu kes ve bir KeyDown olayı tetikle. Örneğin, Sekme ve Enter'ın bir metin kutusunda işlenmesini istiyorsunuz. |
IsInputKey öğesini geçersiz kılın. Alternatif olarak, istediğiniz anahtar veya anahtarlar için PreviewKeyDown olayını işleyebilir ve IsInputKey öğesinin PreviewKeyDownEventArgs özniteliğini true olarak ayarlayabilirsiniz. |
| Bir denetim öğesi üzerinde özel giriş veya gezinti işleme gerçekleştirin. Örneğin, seçili öğeyi değiştirmek için liste denetiminizde ok tuşlarının kullanılmasını istiyorsunuz. | Geçersiz kılmak ProcessDialogKey |
| Bir navigasyon tuşunun yolunu kes ve bir KeyPress olayı tetikle. Örneğin, bir dönüş kutusu denetiminde, öğeler arasında ilerlemeyi hızlandırmak için birden çok ok tuşuna basmak istersiniz. | IsInputChar öğesini geçersiz kılın. |
| KeyPress etkinliği sırasında özel giriş veya gezinme işlemi gerçekleştirin. Örneğin, bir liste denetiminde R tuşunu basılı tutarak r harfiyle başlayan öğeler arasında atlar. | Geçersiz kılmak ProcessDialogChar |
| Özel kısayol tuşu işlemesi yapın; örneğin, bir araç çubuğunda bulunan kullanıcı tanımlı çizimli düğmelerde kısayol tuşlarını işlemek istiyorsunuz. | ProcessMnemonic öğesini geçersiz kılın. |
Ayrıca bakınız
.NET Desktop feedback