c#的winform里的MouseMove事件很特殊,當鼠標在一個組件上移動的時候會收到MouseMove事件,但是另一種情況:當在組件上按住左鍵拖拽移動(組件先收到MouseDown事件)的時候,鼠標在整個窗口內移動時,這個組件都會收到MouseMove事件,而這個組件的MouseUp事件的就收范圍也會變為窗口,也就是說,按住左鍵的情況是特殊的,隨后的所有鼠標事件都會被發送到MouseDown發送到的那個組件。貌似是winform為實現組件拖拽的特殊處理。
這樣拖拽組件就變得更容易實現了,只要在單個組件上就能實現,而不用想javascript或其他ui框架那么麻煩了。
例子:http://www.codeproject.com/Articles/31840/Move-controls-on-a-form-at-runtime