Klavye Girdisi Nasıl Çalışır

Windows Forms, Windows iletilerine yanıt olarak klavye olaylarını yükselterek klavye girişini işler. Çoğu Windows Forms uygulaması, klavye olaylarını işleyerek klavye girişini özel olarak işler. Bununla birlikte, klavye iletilerinin denetime ulaşmadan önce tuşları kesme gibi daha gelişmiş klavye girişi senaryoları uygulayabilmek için nasıl çalıştığını anlamanız gerekir. Bu konu, Windows Forms'un tanıdığı anahtar veri türlerini açıklar ve klavye iletilerinin nasıl yönlendirildiğini gösteren bir genel bakış sağlar. Klavye olayları hakkında bilgi için bkz . Klavye Olaylarını Kullanma.

Anahtar Türleri

Windows Forms, klavye girişini bit düzeyinde Keys sabit listesiyle temsil edilen sanal anahtar kodları olarak tanımlar. Sabit listesiyle Keys , tek bir değer elde etmek için bir dizi basılan tuş birleştirebilirsiniz. Bu değerler, WM_KEYDOWN ve WM_SYSKEYDOWN Windows iletilerine eşlik eden değerlere karşılık gelir. veya KeyUp olaylarını işleyerek çoğu fiziksel tuş basıldığını KeyDown algılayabilirsiniz. Karakter anahtarları, numaralandırmanın Keys bir alt kümesidir ve WM_CHAR ve WM_SYSCHAR Windows iletilerine eşlik eden değerlere karşılık gelir. Basılan tuşların birleşimi bir karakterle sonuçlanırsa, olayı işleyerek KeyPress karakteri algılayabilirsiniz. Alternatif olarak, hangi tuşlara basıldığını bulmak ve tuş göndermek için Visual Basic programlama arabirimi tarafından kullanıma sunulan kullanabilirsiniz Keyboard. Daha fazla bilgi için bkz . Klavyeye Erişme.

Klavye Olaylarının Sırası

Daha önce listelendiği gibi, bir denetimde gerçekleşebilecek klavyeyle ilgili 3 olay vardır. Aşağıdaki sıra, olayların genel sırasını gösterir:

  1. Kullanıcı "a" anahtarını iter, anahtar önceden işlenir, gönderilir ve bir KeyDown olay gerçekleşir.

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

  3. Kullanıcı "a" anahtarını serbest bırakır, anahtar önceden işlenir, gönderilir ve bir KeyUp olay oluşur.

Anahtarları Ön İşleme

Diğer iletiler gibi, klavye iletileri de bir form veya denetim yönteminde WndProc işlenir. Ancak, klavye iletileri işlenmeden önce yöntemi, PreProcessMessage ö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. İ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ştirilen eylem ve gerçekleşen ilgili yöntem, yöntemin gerçekleştiği sırayla gösterilir.

KeyDown olayı için ön işleme

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 bir anahtar olayı gerçekleşmez. döndürürse falseIsInputKey ç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öntemi döndürürse true, denetimin normal bir karakter olduğu ve bir KeyDown olayın tetiklenmiş olduğu anlamına gelir. ProcessDialogKey ise falseçağrılır. Not: Denetimin bir tuş veya tuş bileşimi aldığından emin olmak için olayı işleyebilir PreviewKeyDown ve istediğiniz anahtar veya anahtarlar için öğesinin değerini ayarlayabilirsiniz PreviewKeyDownEventArgsIsInputKeytrue.
Gezinti tuşunu (ESC, SEKME, Return veya ok tuşları) denetleyin. ProcessDialogKey Bu yöntem, denetimin içinde odağı denetimle üst öğesi arasında değiştirme gibi özel işlevler kullanan bir fiziksel anahtarı işler. Hemen denetim anahtarı işlemezse, ProcessDialogKey üst denetimde çağrılır ve hiyerarşideki en üstteki denetimde bu şekilde devam eder. Bu yöntem döndürürse true, ön işleme tamamlanır ve bir anahtar olay oluşturulmaz. döndürürse falsebir KeyDown olay oluşur.

KeyPress Olayı için Ön İş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 döndürür true, KeyPress olay oluşturulur 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 gibi ProcessDialogKeybu yöntem, denetim hiyerarşisi olarak çağrılır. Denetim bir kapsayıcı denetimiyse, kendisini ve alt denetimlerini çağırarak ProcessMnemonic anımsatıcıları denetler. döndürürse ProcessDialogChartrue, bir KeyPress olay gerçekleşmez.

Klavye İletilerini İş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 iletisinin denetim tarafından işlenip işlenmediğini ve kullanılacağını belirten bir Boolean değer döndürür. Yöntemlerden biri döndürürse true, ileti işlenmiş olarak kabul edilir ve daha fazla işlem için denetimin tabanına veya üst öğesine geçirılmaz. 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.

Metot 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 üst öğesine gönderir. döndürürse ProcessKeyPreviewtruehiçbir anahtar olayı oluşturulmaz, aksi takdirde ProcessKeyEventArgs çağrılır.
ProcessKeyEventArgs Bu yöntem , KeyPressve KeyUp olaylarını KeyDownuygun şekilde oluşturur.

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 çok 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 . Türetilmiş sınıflarda özellikleri ve yöntemleri geçersiz kılma.

Görev Metot
Bir gezinti anahtarının yolunu kesme ve olay KeyDown oluşturma. Örneğin, SEKME ve Return'un bir metin kutusunda işlenmesini istiyorsunuz. öğesini geçersiz kılın IsInputKey. Not: Alternatif olarak, olayı işleyebilir PreviewKeyDown ve istediğiniz anahtar veya anahtarlar için öğesinin değerini ayarlayabilirsiniz PreviewKeyDownEventArgsIsInputKeytrue.
Bir denetimde ö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ılma ProcessDialogKey
Bir gezinti anahtarının yolunu kesme ve olay KeyPress oluşturma. Örneğin, bir dönüş kutusu denetiminde, öğeler arasında ilerlemeyi hızlandırmak için birden çok ok tuşuna basmak istersiniz. öğesini geçersiz kılın IsInputChar.
Olay sırasında KeyPress özel giriş veya gezinti işleme 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ılma ProcessDialogChar
Özel anımsatıcı işleme gerçekleştirin; örneğin, bir araç çubuğunda bulunan sahip tarafından çizilmiş düğmelerde anımsatıcıları işlemek istiyorsunuz. öğesini geçersiz kılın ProcessMnemonic.

Ayrıca bkz.