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

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

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

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

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

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

就這么簡單。只要按照上述方法設置好屬性,當用戶單擊右鍵時,菜單便會自動顯示出來。此外,如果你想進一步實現右鍵拖拽,這才涉及到事件處理。在MFC中,你會自然而然想到用OnRButtonDown和OnRButtonUp實現,但是那不是Windows窗體(Forms)的工作方式。雖然許多窗口類確實提供了可以改寫的虛擬函數來處理常用消息(如: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.    // 構造函數  
  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 函數。.NET框架中,每當鼠標進入或離開特定控制時便會觸發MouseEnter 和MouseLeave,當你想在鼠標移動到控制上時使控制呈高亮狀態,這些事件相當有用,例如在瀏覽器中高亮顯示鏈接。當鼠標移動到控制上后,在預先確定好的時間里(這個時間由 SystemParametersInfo(SPI_GETMOUSEHOVERTIME)) 指定),.NET 框架會激活 MouseHover。它在 Tooltips 和其它類似的定時彈出式功能應用中廣泛使用。

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

(表二)由 Click 激發的事件

控制或控件 鼠標左鍵單擊 鼠標左鍵雙擊 鼠標右鍵單擊 鼠標右鍵雙擊 鼠標中鍵單擊 鼠標中鍵雙擊
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獲取消息參數,所以你或多或少要用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-09-07 18:08:25

C#鼠標指針

2009-08-27 18:02:22

C#事件處理

2023-06-15 14:09:00

解析器Servlet容器

2009-08-12 18:28:09

C#事件處理程序

2015-12-28 11:25:51

C++異常處理機制

2009-09-02 19:11:42

C#鼠標滾輪

2023-02-23 08:15:33

Spring異常處理機制

2009-08-04 09:56:46

C#事件處理自定義事件

2021-03-25 07:44:39

C++異常處理開發技術

2009-06-02 10:32:30

Oracle并發處理

2011-04-06 10:27:46

Java異常處理

2024-03-04 10:00:35

數據庫處理機制
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩高清 | 国产麻豆一区二区三区 | 国产一区二区电影网 | 在线天堂免费中文字幕视频 | 国产精品国产精品国产专区不蜜 | 欧美日韩国产精品一区二区 | 日韩一区二区三区av | 中文字幕视频在线免费 | 国产精品久久久久久妇女6080 | 免费一区 | 欧美a区| 亚洲三区在线观看 | 日韩精品一区二区三区在线播放 | 午夜寂寞福利视频 | 天堂网中文| 久草新在线| 91网站在线看 | 成人毛片网站 | 日本又色又爽又黄的大片 | 视频在线观看亚洲 | 色99视频 | 日本a级大片| 久久综合狠狠综合久久 | 99精品热视频| 九九爱这里只有精品 | 久久精品久久久久久 | 韩日精品在线观看 | 久久久久国产 | 日韩欧美大片 | 亚洲社区在线 | 99精品国产一区二区青青牛奶 | 欧美精品v | 久久久久黄 | 日韩在线欧美 | 午夜久久久久久久久久一区二区 | 日韩精品一区二区三区中文字幕 | 亚洲视频在线观看 | 久久国产欧美日韩精品 | 国产精品国产a级 | 日韩成人免费av | 成人在线小视频 |