最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)移動(dòng)窗體的兩種共方法

 更新時(shí)間:2024年09月12日 10:50:32   作者:火星papa  
在C#Form窗體設(shè)計(jì)中,如果我們不需要使用默認(rèn)邊框設(shè)計(jì)自己個(gè)性化的窗體,這時(shí)候你會(huì)發(fā)現(xiàn)拖動(dòng)窗體的功能就沒(méi)有了,這里需要自己構(gòu)建方法讓用戶可以拖動(dòng)整個(gè)窗體,下面就介紹兩種方法來(lái)實(shí)現(xiàn),需要的朋友可以參考下

引言

在C#Form窗體設(shè)計(jì)中,如果我們不需要使用默認(rèn)邊框設(shè)計(jì)自己個(gè)性化的窗體(FromBorderStyle=none時(shí)),這時(shí)候你會(huì)發(fā)現(xiàn)拖動(dòng)窗體的功能就沒(méi)有了,這里需要自己構(gòu)建方法讓用戶可以拖動(dòng)整個(gè)窗體,這里我們使用前輩的方法實(shí)現(xiàn)和描述一下。即可以通過(guò)窗體中的控件事件來(lái)控制拖動(dòng)整個(gè)窗體,也可以通過(guò)系統(tǒng)API 捕獲鼠標(biāo)拖動(dòng)窗體,下面就介紹這兩方法。

一、通過(guò)控件事件移動(dòng)窗體

1、創(chuàng)建窗體界面

在項(xiàng)目中添加窗體,我這里添加一個(gè)窗體test1,并添加一個(gè)label作為操作目標(biāo),添加上自己的文字,顏色突顯一下。

2、添加控件事件

通過(guò)屬性欄中的事件添加三個(gè)事件,分別是鼠標(biāo)的MouseDown、MouseMove以及MouseUp事件。

3、添加代碼

在窗體代碼中添加代碼,詳見(jiàn)下面代碼和注釋。

        //鼠標(biāo)是否拖動(dòng)標(biāo)志
        private bool isDragging = false;
        //鼠標(biāo)按下時(shí)的位置
        private Point downPosition;
        //鼠標(biāo)按下時(shí)的窗體位置
        private Point lastFormPosition;
        
        /// <summary>
        /// 鼠標(biāo)按下事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void label_MouseDown(object sender, MouseEventArgs e)
        {
            //判斷是否為鼠標(biāo)左鍵按下
            if (e.Button == MouseButtons.Left)
            {
                //置標(biāo)志為true
                isDragging = true;
                //保存當(dāng)前鼠標(biāo)坐標(biāo)
                downPosition = Cursor.Position;
                //保存當(dāng)前窗體坐標(biāo)
                lastFormPosition = this.Location;
            }
        }
        /// <summary>
        ///  鼠標(biāo)移動(dòng)事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void label_MouseMove(object sender, MouseEventArgs e)
        {
            //判斷鼠標(biāo)左鍵是否按下
            if (isDragging)
            {
                // 計(jì)算鼠標(biāo)移動(dòng)的偏移量
                int moveX = Cursor.Position.X - downPosition.X;
                int moveY = Cursor.Position.Y - downPosition.Y;

                // 更新窗體的位置
                this.Location = new Point(lastFormPosition.X + moveX, lastFormPosition.Y + moveY);
            } 
        }
        /// <summary>
        /// 鼠標(biāo)松開(kāi)事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void label_MouseUp(object sender, MouseEventArgs e)
        {
            //如果是鼠標(biāo)左鍵松開(kāi),則修改標(biāo)志為false
            if (e.Button == MouseButtons.Left)
            {
                isDragging = false;
            }
        }

二、通過(guò)windowsAPI移動(dòng)窗體

1、 構(gòu)建窗體和添加事件

構(gòu)建窗體和添加事件同上一個(gè)個(gè)方法,我就不詳細(xì)說(shuō)明了,只是添加事件的主題更換成窗體test1。

2、代碼展示

構(gòu)建窗體和添加事件通過(guò)鼠標(biāo)移動(dòng)事件中,調(diào)用windows系統(tǒng)API的SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam)函數(shù),可以看到除控件外的部分都可以用來(lái)拖動(dòng)整個(gè)窗體。

   private const int HT_CAPTION = 0x2;//窗體標(biāo)題
   private const int WM_NCLBUTTONDOWN = 0xA1;//鼠標(biāo)點(diǎn)擊的是非客戶區(qū)

   [DllImport("user32.dll")]
   public static extern bool ReleaseCapture();
   [DllImport("user32.dll")]
   public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

   /// <summary>
   /// 窗體鼠標(biāo)移動(dòng)事件
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   private void test1_MouseMove(object sender, MouseEventArgs e)
   {
       if (e.Button == MouseButtons.Left)
       {
           //釋放鼠標(biāo)捕獲
           ReleaseCapture();
           //非客戶區(qū)鼠標(biāo)的拖動(dòng)窗體消息
           SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
       } 
   }

三、其它方式

也可以直接通過(guò)系統(tǒng)鉤子, WndProc(ref Message m)重載實(shí)現(xiàn)。代碼如下:

 internal static int WM_NCHITTEST = 0x84;
 internal static IntPtr HTCLIENT = (IntPtr)0x1;
 internal static IntPtr HTCAPTION = (IntPtr)0x2;
 internal static int WM_NCLBUTTONDBLCLK = 0x00A3;
 protected override void WndProc(ref Message m)
 {
     if (m.Msg == WM_NCLBUTTONDBLCLK)
     {
         return;
     }
     if (m.Msg == WM_NCHITTEST)
     {
         base.WndProc(ref m);
         if (m.Result == HTCLIENT)
         {
             m.HWnd = this.Handle;
             m.Result = HTCAPTION;
         }
         return;
     }
     base.WndProc(ref m);
 }

到此這篇關(guān)于C#移動(dòng)窗體的兩種共方法的文章就介紹到這了,更多相關(guān)C#移動(dòng)窗體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何利用C#打印九九乘法表

    如何利用C#打印九九乘法表

    這篇文章主要給大家介紹了關(guān)于如何利用C#打印九九乘法表的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C#中的where泛型約束介紹

    C#中的where泛型約束介紹

    這個(gè)關(guān)于泛型約束的東西我看了幾天了。一直沒(méi)打看懂,我的領(lǐng)悟能力有點(diǎn)差,剛才突然明白了一點(diǎn)
    2013-04-04
  • 學(xué)習(xí)Winform分組類控件(Panel、groupBox、TabControl)

    學(xué)習(xí)Winform分組類控件(Panel、groupBox、TabControl)

    這篇文章主要和大家一起學(xué)習(xí)Winform分組類控件,包括容器控件(Panel),分組框控件(groupBox)和選項(xiàng)卡控件(TabControl)等控件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • C#使用Zxing.dll組件解析二維碼的實(shí)現(xiàn)

    C#使用Zxing.dll組件解析二維碼的實(shí)現(xiàn)

    ZXing是一個(gè)開(kāi)源的,支持多種格式的條形碼圖像處理庫(kù),本文主要介紹了C#使用Zxing.dll組件解析二維碼的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • C#實(shí)現(xiàn)Ping的方法小結(jié)

    C#實(shí)現(xiàn)Ping的方法小結(jié)

    這篇文章主要介紹了C#實(shí)現(xiàn)Ping的方法,以兩個(gè)實(shí)例形式形式較為詳細(xì)的分析了C#實(shí)現(xiàn)ping功能的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#不提升自己程序的權(quán)限實(shí)現(xiàn)操作注冊(cè)表

    C#不提升自己程序的權(quán)限實(shí)現(xiàn)操作注冊(cè)表

    這篇文章主要介紹了C#不提升自己程序的權(quán)限實(shí)現(xiàn)操作注冊(cè)表的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法

    Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法

    游戲中收到傷害掉血,會(huì)有飄動(dòng)的傷害數(shù)值,本文主要介紹Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • c#正反序列化XML文件示例(xml序列化)

    c#正反序列化XML文件示例(xml序列化)

    這篇文章主要介紹了c#正反序列化XML文件示例,可以將對(duì)象序列化為XML文本或者文件,或者將XML文件或文本反序列化為對(duì)象,要求進(jìn)行序列化的對(duì)象不能出現(xiàn)序列化異常,支持類的嵌套,要求類的屬性為public
    2014-03-03
  • C#對(duì)Windows服務(wù)組的啟動(dòng)與停止操作

    C#對(duì)Windows服務(wù)組的啟動(dòng)與停止操作

    這篇文章主要為大家詳細(xì)介紹了C#對(duì)Windows服務(wù)組的啟動(dòng)與停止操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • WPF實(shí)現(xiàn)帶篩選功能的DataGrid

    WPF實(shí)現(xiàn)帶篩選功能的DataGrid

    在默認(rèn)情況下,WPF提供的DataGrid僅擁有數(shù)據(jù)展示等簡(jiǎn)單功能,如果要實(shí)現(xiàn)像Excel一樣復(fù)雜的篩選過(guò)濾功能,則相對(duì)比較麻煩。本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述如何通過(guò)WPF實(shí)現(xiàn)DataGrid的篩選功能,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正
    2023-03-03

最新評(píng)論

普兰县| 台中县| 许昌市| 仙游县| 娱乐| 曲周县| 苍南县| 屯昌县| 稻城县| 拉萨市| 温州市| 公安县| 诸城市| 武陟县| 永春县| 泰和县| 孝昌县| 仙游县| 商都县| 乌鲁木齐市| 读书| 白朗县| 竹溪县| 哈尔滨市| 依安县| 伊金霍洛旗| 台湾省| 浦县| 靖西县| 定结县| 延津县| 原平市| 南郑县| 平潭县| 三亚市| 东乡族自治县| 温宿县| 天峨县| 佛坪县| 杭锦后旗| 天柱县|