日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解C#鼠標(biāo)事件的處理機(jī)制

C#鼠標(biāo)事件包括鼠標(biāo)的很多操作,比如為用戶提供鼠標(biāo)的右鍵單擊功能、右鍵拖拽等等。處理C#鼠標(biāo)事件比較簡(jiǎn)單,只要設(shè)置好屬性,點(diǎn)擊右鍵就會(huì)出現(xiàn)菜單,進(jìn)一步右鍵拖拽就涉及到時(shí)間處理。

創(chuàng)新互聯(lián)建站成都網(wǎng)站建設(shè)按需策劃設(shè)計(jì),是成都網(wǎng)站開(kāi)發(fā)公司,為成都汽車(chē)玻璃修復(fù)提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開(kāi)發(fā)等。成都網(wǎng)站推廣熱線:13518219792

過(guò)去用C++/MFC開(kāi)發(fā)程序時(shí),常常為用戶提供鼠標(biāo)的右鍵單擊功能,如今在.NET框架中使用C#,也想在程序中提供鼠標(biāo)右鍵單擊功能,比如,在文本框、窗格、標(biāo)簽以及主窗口背景上使用鼠標(biāo)右鍵。畢竟C#不是C++/MFC,那么如何處理C#鼠標(biāo)事件呢?本文下面將專門(mén)探討這個(gè)問(wèn)題。

在.NET框架下編程是非常容易的一件事情,有時(shí)候容易得連C++程序員想都想不到。這主要是因?yàn)橛肅++編寫(xiě)代碼常常需要“硬工夫”。所謂“硬工夫”,也就是很多細(xì)節(jié)都要自己考慮和處理。但使用C#則不然。如果你想顯示上下文菜單,完全沒(méi)有必要去和事件參合。只要設(shè)置控制的ContextMenu屬性即可,就象下面這樣:

 
 
 
  1. ContextMenu myContextMenu = ...
  2. myControl.ContextMenu = myContextMenu;  

就這么簡(jiǎn)單。只要按照上述方法設(shè)置好屬性,當(dāng)用戶單擊右鍵時(shí),菜單便會(huì)自動(dòng)顯示出來(lái)。此外,如果你想進(jìn)一步實(shí)現(xiàn)右鍵拖拽,這才涉及到事件處理。在MFC中,你會(huì)自然而然想到用OnRButtonDown和OnRButtonUp實(shí)現(xiàn),但是那不是Windows窗體(Forms)的工作方式。雖然許多窗口類確實(shí)提供了可以改寫(xiě)的虛擬函數(shù)來(lái)處理常用消息(如:Form.OnActivated和Form.OnClosed),但是在.NET框架中編程,你必須要學(xué)會(huì)用事件來(lái)思考,而且要了解一個(gè)類提供了哪些事件。下面這個(gè)表列出了被Control類提供的比較常用的事件:

(表一)

Click HelpRequested MouseLeave
ContextMenuChanged Invalidated MouseMove
DoubleClick KeyDown MouseUp
DragDrop KeyPress MouseWheel
DragEnter KeyUp Move
DragLeave Layout Paint
DragOver Leave ParentChanged
EnabledChanged LostFocus Resize
Enter MouseDown SizeChanged
FontChanged MouseEnter StyleChanged
GotFocus MouseHover TextChanged

注意表中用黑體標(biāo)出的事件,這些事件顧名便可思意:MouseDown、 MouseEnter、 MouseHover、 MouseLeave、 MouseMove  和 MouseUp,如果你想要處理右鍵按下事件,可以安裝MouseDown 事件處理例程,用MouseEventArgs.Button == MouseButtons.Right 檢查 MouseEventArgs,下面的代碼段示范了如何來(lái)做:

  
  
  
  1. public class MyControl : Control
  2. {
  3.    // 構(gòu)造函數(shù)
  4.    public MyControl() {
  5.       // 安裝右鍵按下事件處理器 
  6.       this.myctl1.MouseDown += 
  7.          new MouseEventHandler(this.OnMouseDown);
  8.    }
  9.    // 處理例程
  10.    private void OnMouseDown(object sender, MouseEventArgs e) {
  11.       if (e==MouseButtons.Right)
  12.          // do something
  13.    }

表一里有三個(gè)有用的鼠標(biāo)事件是在MFC中不能直接處理的:MouseEnter、 MouseHover 和MouseLeave。在Win32 里,要處理這些事件必須通過(guò)專門(mén)的TrackMouseEvent 函數(shù)。.NET框架中,每當(dāng)鼠標(biāo)進(jìn)入或離開(kāi)特定控制時(shí)便會(huì)觸發(fā)MouseEnter 和MouseLeave,當(dāng)你想在鼠標(biāo)移動(dòng)到控制上時(shí)使控制呈高亮狀態(tài),這些事件相當(dāng)有用,例如在瀏覽器中高亮顯示鏈接。當(dāng)鼠標(biāo)移動(dòng)到控制上后,在預(yù)先確定好的時(shí)間里(這個(gè)時(shí)間由 SystemParametersInfo(SPI_GETMOUSEHOVERTIME)) 指定),.NET 框架會(huì)激活 MouseHover。它在 Tooltips 和其它類似的定時(shí)彈出式功能應(yīng)用中廣泛使用。

這些鼠標(biāo)事件和大家所熟悉的Click 事件有何關(guān)系呢?我想可以這么認(rèn)為,Click屬于層次較高的邏輯事件,而鼠標(biāo)事件的級(jí)別相對(duì)較低,例如,不管用戶按下的是左鍵還是右鍵,F(xiàn)orms都觸發(fā)Click 事件,而文本框只能觸發(fā)左鍵的Click事件。表二中列出了不同種類的控制其Click事件的含意。

(表二)由 Click 激發(fā)的事件

控制或控件 鼠標(biāo)左鍵單擊 鼠標(biāo)左鍵雙擊 鼠標(biāo)右鍵單擊 鼠標(biāo)右鍵雙擊 鼠標(biāo)中鍵單擊 鼠標(biāo)中鍵雙擊
MonthCalendar, DateTimePicker, RichTextBox, HScrollBar, VScrollBar None None None None None None
Button, CheckBox, RadioButton Click Click, Click None None None None
ListBox, CheckedListBox, ComboBox Click Click, DoubleClick None None None None
TextBox, DomainUpDown, NumericUpDown Click Click, DoubleClick None None None None
*TreeView, *ListView Click Click, DoubleClick Click Click, DoubleClick None None
ProgressBar TrackBar Click Click, Click Click Click, Click Click Click, Click
Form, DataGrid, Label, LinkLabel, Panel,GroupBox, PictureBox, Splitter, DoubleClick, StatusBar,ToolBar, TabPage, **TabControl Click Click, DoubleClick Click Click, DoubleClick Click Click, DoubleClick
* 鼠標(biāo)指針必須在子對(duì)象上方 (TreeNode 或 ListViewItem)
**  TabControl 必須在其 TabPages  頁(yè)集合中至少有一個(gè) TabPage。

***,不管怎樣,只要你愿意,總是可以改寫(xiě)Control.WndProc 來(lái)處理任何WM_XXX 消息,比如:你可以定制WM_NCLBUTTONDOWN 消息處理代碼:

  
  
  
  1. protected override void WndProc(ref Message m)
  2. {
  3.    // 值來(lái)自 winuser.h
  4.    const int WM_NCLBUTTONDOWN = 0x00A1;
  5.    if (m.Msg == WM_NCLBUTTONDOWN) {
  6.       //do something
  7.    }
  8.    base.WndProc(ref m); // 這一步不能忘!

我寫(xiě)了一個(gè)例子程序MouseTrap,如圖一所示,

圖一 MouseEventTrap

該程序示范了如何進(jìn)行鼠標(biāo)事件的處理。如果你借WndProc處理消息,由于必須用IntPtrs獲取消息參數(shù),所以你或多或少要用C編程,但因?yàn)槟阋呀?jīng)諳熟C++,所以此時(shí)你不會(huì)感覺(jué)吃力,而是輕車(chē)熟路。


分享名稱:詳解C#鼠標(biāo)事件的處理機(jī)制
文章地址:http://www.5511xx.com/article/coepipj.html