欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能示例

 更新時(shí)間:2017年07月06日 10:14:49   作者:a771948524  
這篇文章主要介紹了C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能,涉及WinForm控件屬性及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能。分享給大家供大家參考,具體如下:

說明:首先在窗體上放一個(gè)PictrueBox控件,命名為pb1,拖動(dòng)完整代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinFormDrag
{
  public partial class Form1 : Form
  {
    //鼠標(biāo)按下坐標(biāo)(control控件的相對(duì)坐標(biāo))
    Point mouseDownPoint = Point.Empty;
    //顯示拖動(dòng)效果的矩形
    Rectangle rect = Rectangle.Empty;
    //是否正在拖拽
    bool isDrag = false;
    public Form1()
    {
      InitializeComponent();
    }
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
      if (rect != Rectangle.Empty)
      {
        if (isDrag)
        {//畫一個(gè)和Control一樣大小的黑框
          e.Graphics.DrawRectangle(Pens.Black, rect);
        }
        else
        {
          e.Graphics.DrawRectangle(new Pen(this.BackColor), rect);
        }
      }
    }
    /// <summary>
    /// 按下鼠標(biāo)時(shí)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void pb1_MouseDown(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        mouseDownPoint = e.Location;
        //記錄控件的大小
        rect = pb1.Bounds;
      }
    }
    /// <summary>
    /// 移過時(shí)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void pb1_MouseMove(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        isDrag = true;
        //重新設(shè)置rect的位置,跟隨鼠標(biāo)移動(dòng)
        rect.Location = getPointToForm(new Point(e.Location.X - mouseDownPoint.X, e.Location.Y - mouseDownPoint.Y));
        this.Refresh();
      }
    }
    /// <summary>
    /// 釋放鼠標(biāo)按鈕時(shí)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void pb1_MouseUp(object sender, MouseEventArgs e)
    {
      if (e.Button == MouseButtons.Left)
      {
        if (isDrag)
        {
          isDrag = false;
          //移動(dòng)control到放開鼠標(biāo)的地方
          pb1.Location = rect.Location;
          this.Refresh();
        }
        reset();
      }
    }
    //重置變量
    private void reset()
    {
      mouseDownPoint = Point.Empty;
      rect = Rectangle.Empty;
      isDrag = false;
    }
    //把相對(duì)與control控件的坐標(biāo),轉(zhuǎn)換成相對(duì)于窗體的坐標(biāo)。
    private Point getPointToForm(Point p)
    {
      return this.PointToClient(pb1.PointToScreen(p));
    }
  }
}

更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《WinForm控件用法總結(jié)》、《C#窗體操作技巧匯總》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#常見控件用法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》及《C#程序設(shè)計(jì)之線程使用技巧總結(jié)

希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • LZW壓縮算法 C#源碼

    LZW壓縮算法 C#源碼

    本文分享了一個(gè)LZW壓縮算法的C#源碼,有需要的朋友可以參考一下。
    2016-06-06
  • C#中析構(gòu)函數(shù)、Dispose、Close方法的區(qū)別

    C#中析構(gòu)函數(shù)、Dispose、Close方法的區(qū)別

    本文詳細(xì)對(duì)比了C#中析構(gòu)函數(shù)、Dispose和Close方法的區(qū)別,三者都是釋放資源,本文介紹了他們各自的使用方法和使用場(chǎng)景,希望對(duì)大家有所幫助。
    2016-04-04
  • C#調(diào)用帶結(jié)構(gòu)體指針Dll的方法

    C#調(diào)用帶結(jié)構(gòu)體指針Dll的方法

    在C#到底該如何安全的調(diào)用這樣的DLL接口函數(shù)呢?本文將詳細(xì)介紹如何調(diào)用各種參數(shù)的方法,對(duì)C#結(jié)構(gòu)體指針DLL相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-07-07
  • C#如何使用Task執(zhí)行異步操作

    C#如何使用Task執(zhí)行異步操作

    這篇文章主要介紹了C#如何使用Task執(zhí)行異步操作,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-05-05
  • C#獲取注冊(cè)表指定鍵值操作

    C#獲取注冊(cè)表指定鍵值操作

    這篇文章主要介紹了C#獲取注冊(cè)表指定鍵值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C#實(shí)現(xiàn)翻轉(zhuǎn)字符串的方法

    C#實(shí)現(xiàn)翻轉(zhuǎn)字符串的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)翻轉(zhuǎn)字符串的方法,涉及C#操作字符串的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • c# mutex互斥量的深入解析

    c# mutex互斥量的深入解析

    本篇文章主要是對(duì)c#中的mutex互斥量進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • DevExpress設(shè)置餅狀圖的Lable位置實(shí)例

    DevExpress設(shè)置餅狀圖的Lable位置實(shí)例

    這篇文章主要介紹了DevExpress設(shè)置餅狀圖的Lable位置的方法,以實(shí)例形式詳細(xì)講述了設(shè)置餅狀圖的Lable位置具體實(shí)現(xiàn)過程,需要的朋友可以參考下
    2014-10-10
  • c#禁止通過拖動(dòng),雙擊標(biāo)題欄改變窗體大小的方法

    c#禁止通過拖動(dòng),雙擊標(biāo)題欄改變窗體大小的方法

    今天小編就為大家分享一篇c#禁止通過拖動(dòng),雙擊標(biāo)題欄改變窗體大小的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • C# 基礎(chǔ)入門--關(guān)鍵字

    C# 基礎(chǔ)入門--關(guān)鍵字

    本文主要介紹了C# 基礎(chǔ)知識(shí)--關(guān)鍵字的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-03-03

最新評(píng)論