成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解C#鼠標事件的處理機制

開發(fā) 后端
這里將詳細介紹C#鼠標事件的處理機制,畢竟C#不是C++/MFC,那么如何用C#處理鼠標事件呢?本文希望能對大家有所幫助。
C#鼠標事件包括鼠標的很多操作,比如為用戶提供鼠標的右鍵單擊功能、右鍵拖拽等等。處理C#鼠標事件比較簡單,只要設置好屬性,點擊右鍵就會出現(xiàn)菜單,進一步右鍵拖拽就涉及到時間處理。

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

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

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

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

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

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

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

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

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

控制或控件 鼠標左鍵單擊 鼠標左鍵雙擊 鼠標右鍵單擊 鼠標右鍵雙擊 鼠標中鍵單擊 鼠標中鍵雙擊
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
* 鼠標指針必須在子對象上方 (TreeNode 或 ListViewItem)
**  TabControl 必須在其 TabPages  頁集合中至少有一個 TabPage。


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

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

我寫了一個例子程序MouseTrap,如圖一所示,

MouseEventTrap
圖一 MouseEventTrap

該程序示范了如何進行鼠標事件的處理。如果你借WndProc處理消息,由于必須用IntPtrs獲取消息參數(shù),所以你或多或少要用C編程,但因為你已經諳熟C++,所以此時你不會感覺吃力,而是輕車熟路。

責任編輯:彭凡 來源: vckbase.com
相關推薦

2009-08-05 18:09:17

C#異常處理機制

2011-03-17 09:20:05

異常處理機制

2011-07-01 14:20:59

Qt 事件

2011-07-01 14:14:34

Qt 事件

2010-03-05 15:40:16

Python異常

2009-08-12 15:20:21

C#事件處理

2023-02-08 08:11:58

Spring容器核心事件

2021-03-02 09:12:25

Java異常機制

2009-08-12 18:28:09

C#事件處理程序

2023-06-15 14:09:00

解析器Servlet容器

2009-08-27 18:02:22

C#事件處理

2009-09-07 18:08:25

C#鼠標指針

2015-12-28 11:25:51

C++異常處理機制

2009-09-02 19:11:42

C#鼠標滾輪

2009-08-04 09:56:46

C#事件處理自定義事件

2023-02-23 08:15:33

Spring異常處理機制

2009-06-02 10:32:30

Oracle并發(fā)處理

2011-04-06 10:27:46

Java異常處理

2024-03-04 10:00:35

數(shù)據庫處理機制

2021-03-25 07:44:39

C++異常處理開發(fā)技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人干人人看 | 日本一区二区高清视频 | 性欧美xxxx| 9999国产精品欧美久久久久久 | 91香蕉视频在线观看 | 久久国产成人精品国产成人亚洲 | 中文字幕在线观看 | 欧美不卡在线 | 成年人免费在线视频 | av先锋资源 | 久久精品久久精品久久精品 | 日韩欧美精品一区 | 久久久久久亚洲 | 成人一区二区三区视频 | 成人午夜免费视频 | 一区二区免费在线观看 | 老司机67194精品线观看 | 精品1区2区| 在线综合视频 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 亚洲毛片在线 | 91国内视频在线 | 亚洲一区二区三区免费视频 | 日韩精品一区二区三区在线播放 | 网站黄色在线 | 成人免费视频网站在线看 | 黄色在线观看国产 | 正在播放国产精品 | 日韩中文字幕一区二区 | 亚洲国产精品久久久 | 九九热这里只有精品在线观看 | 国产黄色在线观看 | 亚洲综合色视频在线观看 | 欧美日韩综合视频 | 东方伊人免费在线观看 | 国产精品九九九 | 日韩精品一区二区三区老鸭窝 | 国产精品毛片一区二区在线看 | 亚洲一区二区三区在线 | 亚洲成av人片在线观看无码 | 拍真实国产伦偷精品 |