深入分析C#中處理和鍵盤相關(guān)事件的詳解
更新時(shí)間:2013年05月20日 16:14:38 作者:
本篇文章是對C#中處理和鍵盤相關(guān)的事件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
在C#中和鍵盤相關(guān)的事件相對比較少,大致就三種:"KeyDown"、"KeyUp"和"KeyPress"。
(1).如何在C#程序中定義這些事件:
C#中描述"KeyDown"、"KeyUp"的事件的Delegate是"KeyEventHandler"。而描述"KeyPress"所用的 Delegate是"KeyPressEventHandler"。這二個(gè)Delegate都被封裝在命名空 間"Syetem.Windows.Froms"中。為"KeyDown"、"KeyUp"的事件提供數(shù)據(jù)的類是"KeyEventArgs"。而 為"KeyPress"事件提供數(shù)據(jù)的類是"KeyPressEventArgs"。同樣這二者也被封裝在命名空 間"Syetem.Windows.Froms"中。
在C#程序定義"KeyDown"、"KeyUp"事件的語法如下:
"組件名稱"."事件名稱"+= new Syetem.Windows.Froms. KeyEventHandler("事件名稱");
下面是程序中具體實(shí)現(xiàn)代碼:
button1. KeyUp += new Syetem.Windows.Froms. KeyEventHandler(button1_KUp);
下面是響應(yīng)上面事件的基本結(jié)構(gòu)。
private void button1_KUp ( object sender , Syetem.Windows.Froms. KeyEventArgs e )
{
此處加入響應(yīng)此事件的代碼
}
在C#程序定義"KeyPress"事件的語法如下:
"組件名稱"."事件名稱"+= new Syetem.Windows.Froms. KeyPressEventHandler("事件名稱");
下面是程序中具體實(shí)現(xiàn)代碼:
button1. KeyPress += new Syetem.Windows.Froms. KeyPressEventArgs(button1_KPress);
在完成了事件的定義以后,就要在程序中加入響應(yīng)此事件的代碼,否則程序編譯的時(shí)候會報(bào)錯(cuò)。下面是響應(yīng)上面事件的基本結(jié)構(gòu)。
private void button1_KPress ( object sender , Syetem.Windows.Froms. KeyPressEventArgs e )
{
此處加入響應(yīng)此事件的代碼
}
注釋:程序中出現(xiàn)的"button1"是定義的一個(gè)按鈕組件。
(
(2).和鍵盤相關(guān)事件中的典型問題處理辦法:
和鍵盤相關(guān)的典型問題無非就是判定到底是哪個(gè)按鍵被按動。通過上面的三個(gè)事件都可以完成。并且在"KeyEventArgs"類中通過了一個(gè)屬 性"KeyCode",可以用他來讀取當(dāng)前按鍵。所以就在"KeyUp"或者"KeyDown"事件中處理這個(gè)問題。根據(jù)上面這些知識,可以得到用C#編 寫讀取讀取按鍵的程序代碼,下面就是此代碼(key.cs)和此代碼運(yùn)行后的界面:
圖02:用C#讀取鍵盤按鍵的程序運(yùn)行界面
key.cs的代碼如下:
代碼
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
public class Form1 : Form
{
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://初始化窗體中的各個(gè)組件
InitializeComponent ( ) ;
}
protected override void Dispose ( bool disposing )
{
file://清除程序中使用過的資源
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;
this.ClientSize = new System.Drawing.Size ( 292 , 273 ) ;
this.Name = "Form1" ;
this.Text = "C#處理鍵盤事件!" ;
file://為按鍵的按動定義一個(gè)事件處理過程"Form1_KeyUp"
this.KeyUp += new KeyEventHandler ( this.Form1_KeyUp ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
file://顯示你所按動的按鍵名稱
private void Form1_KeyUp ( object sender , KeyEventArgs e )
{
MessageBox.Show ( e.KeyCode.ToString ( ) , "您所按動的健為:" ) ;
}
}
上面都是網(wǎng)上找的,我看了之后,自己試了很多次,按鍵沒反應(yīng)......
后來才在書上找到,原來 要先把對應(yīng)的form 的KeyPreview屬性設(shè)為true
C# codethis.KeyPreview=true;this.KeyDown+=newKeyEventHandler(frmNewBook_KeyDown);
}voidfrmNewBook_KeyDown(objectsender, KeyEventArgs e)
{switch(e.KeyData)
{caseKeys.F4:
Console.WriteLine("樓主給點(diǎn)分吧");break;//.........}
}
(1).如何在C#程序中定義這些事件:
C#中描述"KeyDown"、"KeyUp"的事件的Delegate是"KeyEventHandler"。而描述"KeyPress"所用的 Delegate是"KeyPressEventHandler"。這二個(gè)Delegate都被封裝在命名空 間"Syetem.Windows.Froms"中。為"KeyDown"、"KeyUp"的事件提供數(shù)據(jù)的類是"KeyEventArgs"。而 為"KeyPress"事件提供數(shù)據(jù)的類是"KeyPressEventArgs"。同樣這二者也被封裝在命名空 間"Syetem.Windows.Froms"中。
在C#程序定義"KeyDown"、"KeyUp"事件的語法如下:
"組件名稱"."事件名稱"+= new Syetem.Windows.Froms. KeyEventHandler("事件名稱");
下面是程序中具體實(shí)現(xiàn)代碼:
復(fù)制代碼 代碼如下:
button1. KeyUp += new Syetem.Windows.Froms. KeyEventHandler(button1_KUp);
下面是響應(yīng)上面事件的基本結(jié)構(gòu)。
復(fù)制代碼 代碼如下:
private void button1_KUp ( object sender , Syetem.Windows.Froms. KeyEventArgs e )
{
此處加入響應(yīng)此事件的代碼
}
在C#程序定義"KeyPress"事件的語法如下:
"組件名稱"."事件名稱"+= new Syetem.Windows.Froms. KeyPressEventHandler("事件名稱");
下面是程序中具體實(shí)現(xiàn)代碼:
復(fù)制代碼 代碼如下:
button1. KeyPress += new Syetem.Windows.Froms. KeyPressEventArgs(button1_KPress);
在完成了事件的定義以后,就要在程序中加入響應(yīng)此事件的代碼,否則程序編譯的時(shí)候會報(bào)錯(cuò)。下面是響應(yīng)上面事件的基本結(jié)構(gòu)。
復(fù)制代碼 代碼如下:
private void button1_KPress ( object sender , Syetem.Windows.Froms. KeyPressEventArgs e )
{
此處加入響應(yīng)此事件的代碼
}
注釋:程序中出現(xiàn)的"button1"是定義的一個(gè)按鈕組件。
(
(2).和鍵盤相關(guān)事件中的典型問題處理辦法:
和鍵盤相關(guān)的典型問題無非就是判定到底是哪個(gè)按鍵被按動。通過上面的三個(gè)事件都可以完成。并且在"KeyEventArgs"類中通過了一個(gè)屬 性"KeyCode",可以用他來讀取當(dāng)前按鍵。所以就在"KeyUp"或者"KeyDown"事件中處理這個(gè)問題。根據(jù)上面這些知識,可以得到用C#編 寫讀取讀取按鍵的程序代碼,下面就是此代碼(key.cs)和此代碼運(yùn)行后的界面:
圖02:用C#讀取鍵盤按鍵的程序運(yùn)行界面
key.cs的代碼如下:
復(fù)制代碼 代碼如下:
代碼
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
public class Form1 : Form
{
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://初始化窗體中的各個(gè)組件
InitializeComponent ( ) ;
}
protected override void Dispose ( bool disposing )
{
file://清除程序中使用過的資源
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;
this.ClientSize = new System.Drawing.Size ( 292 , 273 ) ;
this.Name = "Form1" ;
this.Text = "C#處理鍵盤事件!" ;
file://為按鍵的按動定義一個(gè)事件處理過程"Form1_KeyUp"
this.KeyUp += new KeyEventHandler ( this.Form1_KeyUp ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
file://顯示你所按動的按鍵名稱
private void Form1_KeyUp ( object sender , KeyEventArgs e )
{
MessageBox.Show ( e.KeyCode.ToString ( ) , "您所按動的健為:" ) ;
}
}
上面都是網(wǎng)上找的,我看了之后,自己試了很多次,按鍵沒反應(yīng)......
后來才在書上找到,原來 要先把對應(yīng)的form 的KeyPreview屬性設(shè)為true
C# codethis.KeyPreview=true;this.KeyDown+=newKeyEventHandler(frmNewBook_KeyDown);
}voidfrmNewBook_KeyDown(objectsender, KeyEventArgs e)
{switch(e.KeyData)
{caseKeys.F4:
Console.WriteLine("樓主給點(diǎn)分吧");break;//.........}
}
您可能感興趣的文章:
- C++處理鍵盤輸入的方法
- C程序讀取鍵盤碼的方法
- C#中winform實(shí)現(xiàn)自動觸發(fā)鼠標(biāo)、鍵盤事件的方法
- 基于C#實(shí)現(xiàn)的HOOK鍵盤鉤子實(shí)例代碼
- C# 鍵盤Enter鍵取代Tab鍵實(shí)現(xiàn)代碼
- 鍵盤KeyCode值列表匯總
- c# Form中的鍵盤響應(yīng)具體實(shí)現(xiàn)思路
- C# Hook鉤子實(shí)例代碼 截取鍵盤輸入
- C# Winform 實(shí)現(xiàn)屏蔽鍵盤的win和alt+F4的實(shí)現(xiàn)代碼
- 關(guān)于鍵盤事件中keyCode、which和charCode 的兼容性測試
- 簡單獲取鍵盤的KeyCode
- C++鍵盤記錄程序代碼
相關(guān)文章
C#調(diào)用C類型dll入?yún)閟truct的問題詳解
這篇文章主要給大家介紹了關(guān)于C#調(diào)用C類型dll入?yún)閟truct問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03C# 7.0之ref locals and returns(局部變量和引用返回)
這篇文章主要介紹了C# 7.0之ref locals and returns,即局部變量和引用返回,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03c# 線程定時(shí)器 System.Threading.Timer的使用
本文主要介紹了c# 線程定時(shí)器 System.Threading.Timer的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02基于WPF實(shí)現(xiàn)PDF的顯示與轉(zhuǎn)換
這篇文章為大家詳細(xì)主要介紹了如何基于WPF實(shí)現(xiàn)PDF的顯示并轉(zhuǎn)換成圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12C#實(shí)現(xiàn)優(yōu)先隊(duì)列和堆排序
本文詳細(xì)講解了C#實(shí)現(xiàn)優(yōu)先隊(duì)列和堆排序的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04