Klavye kullanmaya genel bakış (Windows Forms .NET)

Windows Forms'da, uygulamalara Windows iletileri biçiminde kullanıcı girişi gönderilir. Geçersiz kılınabilir bir dizi yöntem, bu iletileri uygulama, form ve denetim düzeyinde işler. Bu yöntemler klavye iletileri aldığında, klavye girişi hakkında bilgi almak için işlenebilen olaylar oluşturur. Çoğu durumda, Windows Forms uygulamaları yalnızca bu olayları işleyerek tüm kullanıcı girişlerini işleyebilecektir. Diğer durumlarda, bir uygulamanın belirli bir iletiyi uygulama, form veya denetim tarafından alınmadan önce engellemek için iletileri işleyen yöntemlerden birini geçersiz kılması gerekebilir.

Klavye olayları

Tüm Windows Forms denetimleri, fare ve klavye girişiyle ilgili bir dizi olayı devralır. Örneğin, bir denetim, basılan bir anahtarın karakter kodunu belirlemek için olayı işleyebilir KeyPress . Daha fazla bilgi için bkz . Klavye olaylarını kullanma.

Kullanıcı giriş iletilerini işleyen yöntemler

Formlar ve denetimler, arabirime IMessageFilter ve windows iletilerini ileti kuyruğunun farklı noktalarında işleyen geçersiz kılınabilir yöntemler kümesine erişebilir. Bu yöntemlerin tümü, Windows iletilerinin alt düzey ayrıntılarını kapsülleyen bir Message parametreye 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.

Metot 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 EnableNotifyMessage çağrılabilmesi için stil bitinin ayarlanması gerekir.

Klavye ve fare iletileri, bu tür iletilere özgü ek bir geçersiz kılınabilir yöntem kümesi tarafından da işlenir. Daha fazla bilgi için Anahtarları ön işleme 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. 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.

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 iş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 PreviewKeyDownEventArgs IsInputKey true.
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 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 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 ProcessDialogChar true, 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 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 ProcessKeyPreview truehiç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 . Devralma (C# Programlama Kılavuzu) veya Devralma (Visual Basic)

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 PreviewKeyDownEventArgs IsInputKey true.
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ılmak 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ılmak 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.