Makale numarası: 320584 - Son Gözden Geçirme: 11 Aralık 2006 Pazartesi - Gözden geçirme: 2.4

Visual C# kullanarak denetimlerde tuş vuruşlarına nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu adım adım makalede, Windows Forms denetimleri tuş vuruşlarına nasıl gösterir. Bu makaledeki örnek kodu kullanarak, herhangi bir tek tek tuş vuruşu müdahale. Ayrıca, tuş bileşimlerini, CTRL ve ALT müdahale. Bu teknik PRINT SCREEN tuşuna yakalayın. Ayrıca, bazı tuş vuruşları arasında olan bir ek anahtar, bir Web tarayıcısı veya bir CD-ROM çalar denetim tuşları gibi klavye yakalanması değil.

Çoğu, standart KeyUpKeyDown ve KeyPress olayları yakalamak ve tuş vuruşlarını işlemek için yeterli amaçlıdır. Ancak, tüm denetimleri, bu olaylar için tüm koşullar altında tüm tuş vuruşlarını yükseltin.

Örneğin, DataGrid'i göz önünde bulundurun: veri kılavuzuna atanmıştır, ok tuşlarını (SOL OK, SAğ OK, YUKARı OK ve AŞAĞı OK) KeyUp olayı üssünü alma. A gibi diğer anahtarlar, veya 4, tüm üç olayları yükseltin. DataGrid şu anda verileri görüntülediğinden, standart klavye olayları hiçbiri gezinti tuşları geçirilen. A gibi bir tuş ya da 4 hiçbir olaylarını yalnızca KeyUp yükseltin veya denetimde seçime bağlı tüm üç olaylarını. Bu durumda, tuş vuruşlarını denetimin durumu ne olursa olsun yakalamak için bu makaledeki adımları izleyebilirsiniz.

DataGrid denetimi bu özellik en sık istenen olduğundan DataGrid ile çalışmak için bu makaledeki kod örnekleri yazılır. Diğer .NET denetimleri ile aynı yaklaşım kullanabilirsiniz.

Anahtar tuzak ayarla

Windows Forms denetimde tuş vuruşlarını yakalamak için <a0></a0>, istediğiniz denetimin sınıfını temel alan yeni bir sınıf türetilmesi gerekir ve ProcessCmdKey yöntemini geçersiz kılar. Geçersiz kılınmış bu yöntemde, yakalamak istediğiniz tuş vuruşlarının işlemek için kod yerleştirecektir. Aşağıdaki örnek kodu bir sınıf için temel yapısını bir örnektir:
class MyDataGrid : System.Windows.Forms.DataGrid
{
   protected override bool ProcessCmdKey(ref Message msg, Keys keyData)	
   {
   }
}	
				

Geçersiz kılınmış yöntemi

Sistem ProcessCmdKey yöntemine iki parametreleri geçirir: msg ve keyData. Msg parametre WM_KEYDOWN gibi <a1>Windows</a1> iletinin içerir. KeyData parametre basılıştan anahtarının anahtar kodunu içerir. CTRL veya ALT de basılı, keyData parametre ModifierKey bilgileri içerir.

Msg parametresi kullanılarak zorunlu değildir; gözardı edebilirsiniz. Bunu, ancak iletinin sınamak için önerilir. Örneğin, bir tuş vuruşu olay olduğunu doğrulamak için WM_KEYDOWN sınayın. Böylece, denetim tuşları (öncelikle, ALT ve CTRL) içeren bir tuş vuruşu bileşimlerini catch olanaklıdır, WM_SYSKEYDOWN sınayın.

Belirli tuşlara yakalamak için <a0></a0>, tuşları numaralandırma için karşılaştırarak keyCode değerlendirebilir. Aşağıdaki kod örneği, YUKARı OK, AŞAĞı OK, SEKME, CTRL + M ve ALT + Z tuş vuruşlarının yakalamak üzere gösterilmiştir:
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
   
if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
   switch(keyData)
      {
         case Keys.Down:
            Console.WriteLine("Down Arrow Captured");
            break;
      
         case Keys.Up:
            Console.WriteLine("Up Arrow Captured");
            break;
 
         case Keys.Tab:
            Console.WriteLine("Tab Key Captured");
            break;
 
         case Keys.Control | Keys.M:
            Console.WriteLine("<CTRL> + m Captured");
            break;
 
         case Keys.Alt | Keys.Z:
            Console.WriteLine("<ALT> + z Captured");
            break;
      }
}
				

Örnek oluşturma

Aşağıdaki örnek, tuş vuruşlarını DataGrid denetimiyle nasıl gösterir.
  1. Visual C# ile Windows Denetim Kitaplığı yeni bir proje oluşturun.
  2. UserControl1 sınıf özelliklerini görüntüleyin ve sonra da MyDataGrid için adını değiştirin.
  3. Kodu için <a1>Denetim</a1> kitaplığı görüntüleyin ve sonra da <a1>Kod</a1>
    public class MyDataGrid : System.Windows.Forms.UserControl
    					
    aşağıdaki:
    public class MyDataGrid : System.Windows.Forms.DataGrid
    					Note In Visual Studio 2005 or Visual Studio 2008, change the following line of code: 
    public partial class MyDataGrid : System.Windows.Forms.DataGrid 
  4. Aşağıdaki yöntem MyDataGrid sınıfına ekleyin:
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)	
    {
       const int WM_KEYDOWN = 0x100;
       const int WM_SYSKEYDOWN = 0x104;
    
       if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
       {
          switch(keyData)
          {
             case Keys.Down:
                this.Parent.Text="Down Arrow Captured";
                break;
          
             case Keys.Up:
                this.Parent.Text="Up Arrow Captured";
                break;
     
             case Keys.Tab:
                this.Parent.Text="Tab Key Captured";
                break;
     
             case Keys.Control | Keys.M:
                this.Parent.Text="<CTRL> + M Captured";
                break;
     
             case Keys.Alt | Keys.Z:
                this.Parent.Text="<ALT> + Z Captured";
                break;
          }				
       }
    
       return base.ProcessCmdKey(ref msg,keyData);
    }
    					
  5. Projeyi derleyin.
  6. Visual C# ile yeni bir Windows uygulaması) projesi oluşturun. Varsayılan olarak, Form1 adlı bir form oluşturulur.
  7. Araçlar menüsünden Toolbox ' ı tıklatın.

    Not Visual Studio 2005 veya Visual Studio 2008'de, Araç kutusu öğeleri seç'i tıklatın.
  8. .NET Framework bileşenleri</a1> sekmesini tıklatın.
  9. Gözat ' ı tıklatın, yeni oluşturulan denetim/DLL bulun ve Tamam ' ı tıklatın.
  10. Denetim MyDataGrid artık araç kutusunda görünür. Form1. Not üzerine koyun: Örnek veriler görüntülenecek kılavuz için kalan adımları kodunu kullanabilirsiniz.

  11. Aşağıdaki kodu formun ad alanını ekleyin. Önce veya sonra form sınıf tanımını kod yerleştirebilirsiniz.
    // This structure is only used in providing sample data for the grid.
    public struct gridData
    {
       private string make;
       private int year;
    
       public gridData(string n,int y)
       {
          make=n;
          year=y;
       }
    
       public string Make
       {
          get{return make;}
          set{make = value;}
       }
    
       public int Year
       {
          get{return year;}
          set{year=value;}
       }
    }
    					
  12. Form "Windows Form Designer generated" bölümü hemen sınıfa, aşağıdaki kodu ekleyin:
    protected gridData[] dataArray=new gridData[5];
    					
  13. Form1 <a1>Load</a1> olayı aşağıdaki kodu ekleyin:
    // Create some sample data.
    dataArray[0]=new gridData("ford",1999);
    dataArray[1]=new gridData("chevrolet",1999);
    dataArray[2]=new gridData("plymouth",1988);
    dataArray[3]=new gridData("honda",1999);
    dataArray[4]=new gridData("fiat",1987);
    
    // Assign the data to the grid.
    myDataGrid1.DataSource=dataArray;
    					
  14. Örneği çalıştırın ve yakalanan (YUKARı OK, AŞAĞı OK, SEKME, CTRL + M ve ALT + Z) olan çeşitli tuş vuruşlarının deneyin. Formun başlığını, hangi tuş vuruşu basılıştan göstermek için güncelleştirilir.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster KB320584 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:320584  (http://support.microsoft.com/kb/320584/en-us/ )