程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c# 移動窗體和控件

c# 移動窗體和控件

編輯:C#入門知識

在winform程序裡面,有時候我們需要移動沒有標題欄窗體或是窗體內的控件,用幾個事件如鼠標單擊,移動,等再加上坐標的計算可以完成這一功能,但是最近發現了一個API函數,可以非常簡單方便的完成這個功能。如下:

       

\\代碼 [DllImportAttribute("user32.dll")]
        private extern static bool ReleaseCapture();
        [DllImportAttribute("user32.dll")]
        private extern static int SendMessage(IntPtr handle, int m, int p, int h);

 

在使用這兩個函數時就導入using System.Runtime.InteropServices;

如下使用:

      ReleaseCapture();
                SendMessage(this.Handle, 0xA1, 0x2, 0);

這裡面除this.Handle參數外其它的不需改變。例如我們給窗體定義一個MouseDown事件:

this.MouseDown += new MouseEventHandler(MyBaseControl_MouseDown);

那麼就可以在點擊窗體的任何一點而進行拖動操作。事件內代碼如:

\\代碼  1 protected void MyBaseControl_MouseDown(object sender, MouseEventArgs e)
 2         {
 3             if (e.Button == MouseButtons.Left)
 4             {
 5                 this.Cursor = Cursors.SizeAll;
 6                 ReleaseCapture();
 7                 SendMessage(this.Handle, 0xA1, 0x2, 0);
 8                 this.Cursor = Cursors.Default;
 9             }
10         }
11 

 

如果用於運行時的某個控件,則可以把上面的代碼放入此控件的MouseDown事件中,只是SendMessage(this.Handle, 0xA1, 0x2, 0);中的

this.Handle參數應改為此控件的Handle,如this.button1.Handle即可實現。

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved