ID Artikel: 320584 - Kajian Terakhir: 26 September 2011 - Revisi: 2.0

Bagaimana untuk menjebak penekanan tombol di kontrol dengan menggunakan Visual C#

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menunjukkan bagaimana untuk menjebak penekanan tombol di kontrol Windows Forms. Dengan menggunakan kode contoh dalam artikel ini, Anda dapat mencegat keystroke hampir setiap individu. Anda juga dapat mencegat kombinasi tombol, termasuk CTRL dan ALT. Teknik ini tidak menangkap kunci Print Screen. Selain itu, beberapa penekanan tombol dari keyboard dengan tombol tambahan, seperti kunci yang mengendalikan Web browser atau CD-ROM player, mungkin tidak ditangkap.

Untuk sebagian besar tujuan, standar KeyUp, KeyDown, dan Menekan tombol peristiwa yang cukup untuk menangkap dan menangani penekanan tombol. Namun, tidak semua kontrol meningkatkan peristiwa ini untuk semua penekanan tombol di bawah semua kondisi.

Sebagai contoh, perhatikan DataGrid kontrol: Jika tidak ada data yang telah ditetapkan untuk grid, tombol panah (panah kiri, kanan panah, panah atas dan bawah) menaikkan hanya KeyUp acara. Kunci lain, seperti sebagai a atau 4, mengumpulkan semua tiga peristiwa. Jika DataGrid saat ini menampilkan data, tidak ada keyboard standar peristiwa yang dibesarkan untuk tombol navigasi. Penekanan tombol seperti sebagai a atau 4 meningkatkan tidak ada acara, meningkatkan hanya KeyUp, atau meningkatkan semua tiga peristiwa, tergantung pada apa yang dipilih dalam kontrol. Dalam situasi ini, Anda dapat mengikuti langkah-langkah dalam artikel ini untuk menangkap keystrokes, terlepas dari keadaan kontrol.

Contoh kode dalam artikel ini ditulis untuk bekerja dengan DataGrid, karena DataGrid adalah kontrol yang fitur ini sering diminta. Anda dapat menggunakan pendekatan yang sama dengan lain.NET kontrol.

Mengatur kunci perangkap

Untuk menjebak penekanan tombol di kontrol Windows Forms, Anda harus memperoleh kelas baru yang didasarkan pada kelas kontrol yang Anda inginkan, dan Anda menimpa ProcessCmdKey metode. Dalam metode ini ditimpa, Anda akan menempatkan kode untuk proses penekanan tombol yang Anda inginkan untuk menjebak. Dalam kode contoh berikut adalah contoh dari struktur dasar untuk seperti kelas:
class MyDataGrid : System.Windows.Forms.DataGrid
{
   protected override bool ProcessCmdKey(ref Message msg, Keys keyData)	
   {
   }
}	
				

Menerapkan metode ditimpa

Sistem melewati dua parameter untuk ProcessCmdKey metode: MSG dan keyData. The MSG parameter ini berisi jendela pesan, misalnya WM_KEYDOWN. The keyData parameter ini berisi kode kunci tombol yang ditekan. Jika CTRL atau ALT juga ditekan, keyData parameter ini berisi informasi ModifierKey.

Menggunakan MSG parameter ini tidak wajib; Anda dapat mengabaikan hal itu. Ini adalah praktik yang baik, namun, tes pesan. Dalam contoh ini, Anda menguji WM_KEYDOWN untuk memverifikasi bahwa ini adalah acara penekanan. Anda juga menguji WM_SYSKEYDOWN, sehingga tidak mungkin untuk menangkap kombinasi penekanan yang mencakup tombol kontrol (terutama ALT dan CTRL).

Untuk menjebak kunci tertentu, Anda dapat mengevaluasi keyCode dengan membandingkan untuk Kunci Pencacahan. Berikut kode sampel menunjukkan bagaimana untuk menangkap penekanan tombol panah atas, bawah, TAB, CTRL + M, dan ALT + Z:
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;
      }
}
				

Membangun sebuah contoh

Contoh berikut menunjukkan cara untuk menjebak keystrokes dengan DataGrid kontrol.
  1. Membuat proyek baru Windows Control Library di Visual C#.
  2. Melihat properti untuk kelas UserControl1, dan kemudian mengubah nama untuk MyDataGrid.
  3. Lihat kode untuk mengendalikan perpustakaan, dan kemudian mengubah baris kode berikut
    public class MyDataGrid : System.Windows.Forms.UserControl
    					
    dengan berikut:
    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. Menambahkan metode berikut untuk MyDataGrid kelas:
    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. Membangun proyek.
  6. Membuat proyek baru aplikasi Windows di Visual C#. Secara default, suatu bentuk yang dinamakan Form1 dibuat.
  7. Pada Alat menu, klik Menyesuaikan Toolbox

    Catatan Pada Visual Studio 2005 atau Visual Studio 2008, klik Memilih item Toolbox.
  8. Klik .NET Framework komponen tab.
  9. Klik People, menemukan kontrol/DLL yang hanya dibuat, dan kemudian klik Oke.
  10. Kontrol MyDataGrid sekarang muncul dalam toolbox. Tempat salah satu pada Form1.CATATAN: Anda dapat menggunakan kode dalam langkah-langkah yang tersisa untuk membuat sampel data untuk grid untuk menampilkan.

  11. Tambahkan kode berikut untuk namespace bentuk. Anda dapat menempatkan kode sebelum atau setelah definisi bentuk kelas.
    // 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. Tambahkan kode berikut ke bentuk kelas, segera setelah bagian "Windows Form Designer dihasilkan kode":
    protected gridData[] dataArray=new gridData[5];
    					
  13. Tambahkan kode berikut untuk Beban acara Form1:
    // 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. Menjalankan sampel, dan mencoba berbagai penekanan tombol yang sedang terjebak (tanda panah atas, bawah, TAB, CTRL + M, dan ALT + Z). Keterangan formulir diperbarui untuk menunjukkan penekanan yang ditekan.

Berlaku bagi:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Kata kunci: 
kbhowtomaster kbmt KB320584 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:320584  (http://support.microsoft.com/kb/320584/en-us/ )