這篇文章主要為大家詳細介紹了C#組件FormDragger窗體拖曳器,具有一定的參考價值,有興趣的小夥伴們可以參考一下
##適用: .net2.0+ winform專案
介紹:
先看公開成員:
//拖拽器开关 bool Enabled { get; set; } //排除列表。可向其中添加或移除控件实例,处于列表中的控件不接受拖拽 List<Control> ExcludeControls { get; } //事件:准备拖拽时发生,可用e.Cancel = true取消拖拽,e还携带其它信息 event EventHandler<FormDraggingCancelEventArgs> Dragging; //事件:拖拽器开关状态改变后 event EventHandler EnabledChanged;
使用挺簡單,隨時隨地
FormDragger.Enabled = true/false就能開閉拖曳功能,例如在Main函數中就可以開好,完了程式內的所有自建窗體就可以愉快的拖曳了,但是,像訊息框MessageBox、各種對話框(如開啟檔案對話框)等由系統提供的窗體不能拖,拖這些需要勾子,犯不著(其實方案裡已經實現了一個DialogDragger.cs,就是用來拖系統對話框的,但已知顏色選擇對話框ColorDialog有問題,所以暫時沒集成,後面感覺有必要且解決了再更新,建議Watch)。關於訊息框,也可以選用這個,由於是自製,所以可以拖。
對於適用拖曳規則的控件,滑鼠左鍵點擊訊息(如MouseDown)是到不了它的,因為被攔截了,所以註冊了這類別事件也不會觸發,若希望某個可拖控制不被拖到,例如某個圖片框,你希望它具備「超鏈」的功能,點上去時執行註冊好的MouseDown事件處理方法,那麼有兩種方式可以實作例外:1、將該控制項加入例外清單:FormDragger.ExcludeControls.Add(pictureBox1);//注意這裡接受的是控制項實例,而不是控制項類型;
2 、註冊FormDragger.Dragging事件,在事件處理方法中,傳入的e有一個Control屬性,表示點到的控件,所以可以判斷e.Control是否你要例外的控件,若是,令e.Cancel = true即可;此外e還攜帶別的訊息,如滑鼠位置、座標類型等供輔助判斷;以上場景在原始碼中都有範例,供你參考。
利用Application.AddMessageFilter向程式加入訊息過濾器,攔截並處理發送到程式窗體的滑鼠左鍵點擊訊息,若滿足邏輯,則攔下該訊息,並往控制項所在的窗體發送點擊標題列的訊息,達到點擊該控制項時系統認為是點到窗體標題列的效果。若想了解處理細節,請前往下面的地址查看。
方案所在:
github.com/ahdung/FormDraggerDemo【優先】
coding.net/u/ahdung/p/FormDraggerDemo/git
git.oschina .net/ahdung/FormDraggerDemo
方案中已寫入測試器,就是截圖那個樣子,歡迎下載體驗。
以上是FormDragger在C#中實作窗體拖曳器的方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!