深入分析C#中處理和鍵盤相關(guān)事件的詳解
更新時(shí)間:2013年05月20日 16:14:38 作者:
本篇文章是對(duì)C#中處理和鍵盤相關(guān)的事件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
在C#中和鍵盤相關(guān)的事件相對(duì)比較少,大致就三種:"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"事件的語(yǔ)法如下:
"組件名稱"."事件名稱"+= 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"事件的語(yǔ)法如下:
"組件名稱"."事件名稱"+= new Syetem.Windows.Froms. KeyPressEventHandler("事件名稱");
下面是程序中具體實(shí)現(xiàn)代碼:
button1. KeyPress += new Syetem.Windows.Froms. KeyPressEventArgs(button1_KPress);
在完成了事件的定義以后,就要在程序中加入響應(yīng)此事件的代碼,否則程序編譯的時(shí)候會(huì)報(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)事件中的典型問(wèn)題處理辦法:
和鍵盤相關(guān)的典型問(wèn)題無(wú)非就是判定到底是哪個(gè)按鍵被按動(dòng)。通過(guò)上面的三個(gè)事件都可以完成。并且在"KeyEventArgs"類中通過(guò)了一個(gè)屬 性"KeyCode",可以用他來(lái)讀取當(dāng)前按鍵。所以就在"KeyUp"或者"KeyDown"事件中處理這個(gè)問(wèn)題。根據(jù)上面這些知識(shí),可以得到用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://清除程序中使用過(guò)的資源
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://為按鍵的按動(dòng)定義一個(gè)事件處理過(guò)程"Form1_KeyUp"
this.KeyUp += new KeyEventHandler ( this.Form1_KeyUp ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
file://顯示你所按動(dòng)的按鍵名稱
private void Form1_KeyUp ( object sender , KeyEventArgs e )
{
MessageBox.Show ( e.KeyCode.ToString ( ) , "您所按動(dòng)的健為:" ) ;
}
}
上面都是網(wǎng)上找的,我看了之后,自己試了很多次,按鍵沒反應(yīng)......
后來(lái)才在書上找到,原來(lái) 要先把對(duì)應(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"事件的語(yǔ)法如下:
"組件名稱"."事件名稱"+= 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"事件的語(yǔ)法如下:
"組件名稱"."事件名稱"+= new Syetem.Windows.Froms. KeyPressEventHandler("事件名稱");
下面是程序中具體實(shí)現(xiàn)代碼:
復(fù)制代碼 代碼如下:
button1. KeyPress += new Syetem.Windows.Froms. KeyPressEventArgs(button1_KPress);
在完成了事件的定義以后,就要在程序中加入響應(yīng)此事件的代碼,否則程序編譯的時(shí)候會(huì)報(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)事件中的典型問(wèn)題處理辦法:
和鍵盤相關(guān)的典型問(wèn)題無(wú)非就是判定到底是哪個(gè)按鍵被按動(dòng)。通過(guò)上面的三個(gè)事件都可以完成。并且在"KeyEventArgs"類中通過(guò)了一個(gè)屬 性"KeyCode",可以用他來(lái)讀取當(dāng)前按鍵。所以就在"KeyUp"或者"KeyDown"事件中處理這個(gè)問(wèn)題。根據(jù)上面這些知識(shí),可以得到用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://清除程序中使用過(guò)的資源
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://為按鍵的按動(dòng)定義一個(gè)事件處理過(guò)程"Form1_KeyUp"
this.KeyUp += new KeyEventHandler ( this.Form1_KeyUp ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
file://顯示你所按動(dòng)的按鍵名稱
private void Form1_KeyUp ( object sender , KeyEventArgs e )
{
MessageBox.Show ( e.KeyCode.ToString ( ) , "您所按動(dòng)的健為:" ) ;
}
}
上面都是網(wǎng)上找的,我看了之后,自己試了很多次,按鍵沒反應(yīng)......
后來(lái)才在書上找到,原來(lái) 要先把對(duì)應(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)自動(dòng)觸發(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 的兼容性測(cè)試
- 簡(jiǎn)單獲取鍵盤的KeyCode
- C++鍵盤記錄程序代碼
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)單的雙色球抽取中獎(jiǎng)號(hào)碼代碼
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單的雙色球抽取中獎(jiǎng)號(hào)碼代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
C# winfrom實(shí)現(xiàn)讀取修改xml
這篇文章主要為大家詳細(xì)介紹了C# winfrom實(shí)現(xiàn)讀取修改xml的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
DevExpress實(shí)現(xiàn)GridControl單元格編輯驗(yàn)證的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridControl單元格編輯驗(yàn)證的方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
C#讀取xml節(jié)點(diǎn)數(shù)據(jù)方法小結(jié)
這篇文章主要介紹了C#讀取xml節(jié)點(diǎn)數(shù)據(jù)的方法,實(shí)例總結(jié)了C#針對(duì)XML文件節(jié)點(diǎn)操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
Unity 百度AI實(shí)現(xiàn)人像動(dòng)漫化效果
這篇文章主要介紹了Unity如何接入百度AI接口, 運(yùn)用對(duì)抗生成網(wǎng)絡(luò)技術(shù),為用戶量身定制千人千面的二次元?jiǎng)勇蜗?,并支持通過(guò)參數(shù)設(shè)置,生成二次元?jiǎng)勇讼?。感興趣的可以學(xué)習(xí)一下2022-01-01
C#獲取應(yīng)用程序路徑或Web頁(yè)面目錄路徑
這篇文章介紹了C#獲取應(yīng)用程序路徑或Web頁(yè)面目錄路徑的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
DevExpress之ChartControl實(shí)現(xiàn)餅狀圖百分比演示實(shí)例
這篇文章主要介紹了DevExpress之ChartControl實(shí)現(xiàn)餅狀圖百分比演示的方法,實(shí)例講述了窗體與圖形繪制函數(shù)的用法,需要的朋友可以參考下2014-10-10
輕松學(xué)習(xí)C#的預(yù)定義數(shù)據(jù)類型
輕松學(xué)習(xí)C#的預(yù)定義數(shù)據(jù)類型,C#的預(yù)定義數(shù)據(jù)類型包括兩種,一種是值類型,一種是引用類型,需要的朋友可以參考下2015-11-11

