日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

c#ovalshape_【原创】C# 实现拖拉控件改变位置与大小(SamWang)(附源代码下载)

發(fā)布時(shí)間:2025/3/15 C# 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#ovalshape_【原创】C# 实现拖拉控件改变位置与大小(SamWang)(附源代码下载) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:

很多時(shí)候我們需要在運(yùn)行時(shí),動(dòng)態(tài)地改變控件的位置以及大小,以獲得更好的布局。比如說實(shí)際項(xiàng)目中的可自定義的報(bào)表、可自定義的單據(jù)等諸如此類。它們有個(gè)特點(diǎn)就是允許客戶或者二次開發(fā)人員設(shè)計(jì)它們需要的界面設(shè)置功能。

本人以前也做過可自定義系統(tǒng),包括界面和功能,主要為了減少開發(fā)人員的工作量以及程序的靈活性和健壯性。

本篇主要討論下,在運(yùn)行時(shí)如何實(shí)現(xiàn)拖拉控件,達(dá)到改變控件位置與大小。功能將模擬VS設(shè)計(jì)界面時(shí)的拖拉功能。

(本篇暫不涉及多控件同時(shí)操作)

一、技術(shù)概述

其實(shí)實(shí)現(xiàn)運(yùn)行時(shí)控件的拖拉并不難,主要是改變控件的Location與Size即可。動(dòng)態(tài)調(diào)整時(shí)再捕獲MouseDown、MouseMove及MouseUp事件來實(shí)時(shí)修改上述兩個(gè)屬性就可以實(shí)現(xiàn)。

二、功能規(guī)劃

在此之前,我們先來看下.net設(shè)計(jì)界面,一旦選中某個(gè)控件時(shí),將會(huì)出現(xiàn)如下圖的邊框:

之后就可以通過拖拉出現(xiàn)的邊框改變其大小。而改變控件的位置,實(shí)際上是當(dāng)鼠標(biāo)點(diǎn)擊在控件內(nèi)部拖動(dòng)時(shí)實(shí)現(xiàn)的。

所有本例也將功能分為兩個(gè)部分實(shí)現(xiàn),分別為控件內(nèi)部拖動(dòng)改變位置與控件邊框拖拉改變大小。

三、具體實(shí)現(xiàn)

1.拖動(dòng)控件改變位置

首先,新建一個(gè)項(xiàng)目,然后添加一個(gè)類,取名叫MoveControl,該類用來給控件掛載事件實(shí)現(xiàn)拖動(dòng)。

接著在該類中添加字段currentControl,用來保存需要操作的控件,即通過構(gòu)造函數(shù)傳遞的控件。

接著創(chuàng)建一方法--AddEvents,用來給當(dāng)前的控件掛載事件。

代碼如下:

DragControl

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Text;4 usingSystem.Windows.Forms;5 usingSystem.Drawing;6

7 namespaceDragControl8 {9 public classMoveControl10 {11 #region Constructors

12 publicMoveControl(Control ctrl)13 {14 currentControl =ctrl;15 AddEvents();16 }17 #endregion

18

19 #region Fields

20 private Control currentControl; //傳入的控件

21 #endregion

22

23 #region Properties

24

25 #endregion

26

27 #region Methods

28 ///

29 ///掛載事件30 ///

31 private voidAddEvents()32 {33 currentControl.MouseClick += newMouseEventHandler(MouseClick);34 currentControl.MouseDown += newMouseEventHandler(MouseDown);35 currentControl.MouseMove += newMouseEventHandler(MouseMove);36 currentControl.MouseUp += newMouseEventHandler(MouseUp);37 }38 #endregion

39

40 #region Events

41 ///

42 ///鼠標(biāo)單擊事件:用來顯示邊框43 ///

44 ///

45 ///

46 void MouseClick(objectsender, MouseEventArgs e)47 {48 }49

50 ///

51 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)52 ///

53 void MouseDown(objectsender, MouseEventArgs e)54 {55

56 }57

58 ///

59 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)60 ///

61 void MouseMove(objectsender, MouseEventArgs e)62 {63 }64

65 ///

66 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)67 ///

68 void MouseUp(objectsender, MouseEventArgs e)69 {70 }71 #endregion

72 }73 }

接著我們需要實(shí)現(xiàn)MouseDown、MouseMove、MouseUp三個(gè)事件。

不過在此之前,我們必須要弄清楚,移動(dòng)即表示坐標(biāo)的改變,所以必定要有個(gè)起始坐標(biāo)和終點(diǎn)坐標(biāo)。

所以我們?cè)贛oveControl類中加入兩個(gè)字段。

private Point pPoint; //上個(gè)鼠標(biāo)坐標(biāo)

private Point cPoint; //當(dāng)前鼠標(biāo)坐標(biāo)

而且在開始拖動(dòng)之前,我們肯定需要先單擊一次控件。在MouseDown時(shí)獲取當(dāng)前光標(biāo)的位置,保存到pPoint中。

(此處用Cursor獲得坐標(biāo)的好處,就是忽略掉容器的麻煩問題)

1 ///

2 ///鼠標(biāo)單擊事件:用來顯示邊框3 ///

4 void MouseClick(objectsender, MouseEventArgs e)5 {6 pPoint =Cursor.Position;7 }

接著便實(shí)現(xiàn)MouseMove的事件,當(dāng)鼠標(biāo)左鍵按下時(shí),接著移動(dòng)鼠標(biāo)后,繼續(xù)鼠標(biāo)移動(dòng)后的坐標(biāo),然后與MouseDown時(shí)記下的坐標(biāo)相減,就得到鼠標(biāo)的位移值,接著控件的Location加上該位移值即可,然后更新pPoint。

1 ///

2 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)3 ///

4 void MouseMove(objectsender, MouseEventArgs e)5 {6 Cursor.Current = Cursors.SizeAll; //當(dāng)鼠標(biāo)處于控件內(nèi)部時(shí),顯示光標(biāo)樣式為SizeAll7 //當(dāng)鼠標(biāo)左鍵按下時(shí)才觸發(fā)

8 if (e.Button ==MouseButtons.Left)9 {10 cPoint = Cursor.Position; //獲得當(dāng)前鼠標(biāo)位置

11 int x = cPoint.X -pPoint.X;12 int y = cPoint.Y -pPoint.Y;13 currentControl.Location = new Point(currentControl.Location.X + x, currentControl.Location.Y +y);14 pPoint =cPoint;15 }16 }

由于此時(shí)還沒涉及到邊框,所以MouseUp暫時(shí)不用處理。至此拖動(dòng)的基本功能已經(jīng)實(shí)現(xiàn)!

目前MoveControl的完整代碼如下:

MoveControl

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Text;4 usingSystem.Windows.Forms;5 usingSystem.Drawing;6

7 namespaceDragControl8 {9 public classMoveControl10 {11 #region Constructors

12 publicMoveControl(Control ctrl)13 {14 currentControl =ctrl;15 AddEvents();16 }17 #endregion

18

19 #region Fields

20 private Control currentControl; //傳入的控件

21 private Point pPoint; //上個(gè)鼠標(biāo)坐標(biāo)

22 private Point cPoint; //當(dāng)前鼠標(biāo)坐標(biāo)

23 #endregion

24

25 #region Properties

26

27 #endregion

28

29 #region Methods

30 ///

31 ///掛載事件32 ///

33 private voidAddEvents()34 {35 currentControl.MouseDown += newMouseEventHandler(MouseDown);36 currentControl.MouseMove += newMouseEventHandler(MouseMove);37 currentControl.MouseUp += newMouseEventHandler(MouseUp);38 }39

40 ///

41 ///繪制拖拉時(shí)的黑色邊框42 ///

43 public static voidDrawDragBound(Control ctrl)44 {45 ctrl.Refresh();46 Graphics g =ctrl.CreateGraphics();47 int width =ctrl.Width;48 int height =ctrl.Height;49 Point[] ps = new Point[5]{new Point(0,0),new Point(width -1,0),50 new Point(width -1,height -1),new Point(0,height-1),new Point(0,0)};51 g.DrawLines(newPen(Color.Black), ps);52 }53 #endregion

54

55 #region Events

56 ///

57 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)58 ///

59 void MouseDown(objectsender, MouseEventArgs e)60 {61 pPoint =Cursor.Position;62 }63

64 ///

65 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)66 ///

67 void MouseMove(objectsender, MouseEventArgs e)68 {69 Cursor.Current = Cursors.SizeAll; //當(dāng)鼠標(biāo)處于控件內(nèi)部時(shí),顯示光標(biāo)樣式為SizeAll70 //當(dāng)鼠標(biāo)左鍵按下時(shí)才觸發(fā)

71 if (e.Button ==MouseButtons.Left)72 {73 MoveControl.DrawDragBound(this.currentControl);74 cPoint = Cursor.Position; //獲得當(dāng)前鼠標(biāo)位置

75 int x = cPoint.X -pPoint.X;76 int y = cPoint.Y -pPoint.Y;77 currentControl.Location = new Point(currentControl.Location.X + x, currentControl.Location.Y +y);78 pPoint =cPoint;79 }80 }81

82 ///

83 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)84 ///

85 void MouseUp(objectsender, MouseEventArgs e)86 {87 this.currentControl.Refresh();88 }89 #endregion

90 }91 }

下面我們來測(cè)試下拖動(dòng)的功能。

創(chuàng)建一個(gè)Form窗體,可以再界面上添加你要測(cè)試的控件類型,此處我只用TextBox左下測(cè)試。在Load的中添加以下代碼,將Form中的所有控件掛載上拖拉功能。

1 private void Form1_Load(objectsender, EventArgs e)2 {3 foreach (Control ctrl in this.Controls)4 {5 newMoveControl(ctrl);6 }7 }

此時(shí),有心人可能會(huì)發(fā)現(xiàn)VS中拖動(dòng)控件時(shí),將會(huì)出現(xiàn)黑色邊框,而處于沒有。

這也很簡(jiǎn)單,我們?cè)贛ouseMove時(shí)加上如下代碼即可。

1 ///

2 ///繪制拖拉時(shí)的黑色邊框3 ///

4 public static voidDrawDragBound(Control ctrl)5 {6 ctrl.Refresh();7 Graphics g =ctrl.CreateGraphics();8 int width =ctrl.Width;9 int height =ctrl.Height;10 Point[] ps = new Point[5]{new Point(0,0),new Point(width -1,0),11 new Point(width -1,height -1),new Point(0,height-1),new Point(0,0)};12 g.DrawLines(newPen(Color.Black), ps);13 }14

15

16 ///

17 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)18 ///

19 void MouseMove(objectsender, MouseEventArgs e)20 {21 Cursor.Current = Cursors.SizeAll; //當(dāng)鼠標(biāo)處于控件內(nèi)部時(shí),顯示光標(biāo)樣式為SizeAll22 //當(dāng)鼠標(biāo)左鍵按下時(shí)才觸發(fā)

23 if (e.Button ==MouseButtons.Left)24 {25 MoveControl.DrawDragBound(this.currentControl);26 cPoint = Cursor.Position; //獲得當(dāng)前鼠標(biāo)位置

27 int x = cPoint.X -pPoint.X;28 int y = cPoint.Y -pPoint.Y;29 currentControl.Location = new Point(currentControl.Location.X + x, currentControl.Location.Y +y);30 pPoint =cPoint;31 }32 }

同時(shí)要在MoveUp的時(shí)候,刷新一下自己,讓黑色邊框消失掉!

1 ///

2 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)3 ///

4 void MouseUp(objectsender, MouseEventArgs e)5 {6 this.currentControl.Refresh();7 }

接著用沒有邊框的控件測(cè)試下就會(huì)很明顯。如下圖所示:

2.通過邊框拖拉控件改變大小

此處的主要思路為:點(diǎn)擊控件的時(shí)候,創(chuàng)建一個(gè)自定義的用戶控件,該用戶控件響應(yīng)區(qū)域就是傳入控件的邊框區(qū)域,同時(shí)給它畫上虛線與8個(gè)小圓圈。

第一、創(chuàng)建用戶控件--FrameControl(邊框控件),然后增加一個(gè)字段用來保存?zhèn)魅氲目丶?#xff0c;還有加載事件,此處類同前面的MoveControl。

FrameControl

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.ComponentModel;4 usingSystem.Drawing;5 usingSystem.Data;6 usingSystem.Linq;7 usingSystem.Text;8 usingSystem.Windows.Forms;9

10 namespaceDragControl11 {12 public partial classFrameControl : UserControl13 {14 #region Constructors

15 publicFrameControl(Control ctrl)16 {17 baseControl =ctrl;18 AddEvents();19 }20 #endregion

21

22 #region Fields

23 Control baseControl; //基礎(chǔ)控件,即被包圍的控件

24 #endregion

25

26 #region Methods

27 ///

28 ///加載事件29 ///

30 private voidAddEvents()31 {32 this.Name = "FrameControl" +baseControl.Name;33 this.MouseDown += newMouseEventHandler(FrameControl_MouseDown);34 this.MouseMove += newMouseEventHandler(FrameControl_MouseMove);35 this.MouseUp += newMouseEventHandler(FrameControl_MouseUp);36 }37

38 #endregion

39

40 #region Events

41 ///

42 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)43 ///

44 void FrameControl_MouseDown(objectsender, MouseEventArgs e)45 {46

47 }48

49 ///

50 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)51 ///

52 void FrameControl_MouseMove(objectsender, MouseEventArgs e)53 {54

55 }56

57 ///

58 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)59 ///

60 void FrameControl_MouseUp(objectsender, MouseEventArgs e)61 {62

63 }64 #endregion

65 }66 }

做完這些準(zhǔn)備工作后,將到了主要的部分,就是給控件畫邊框。

整個(gè)邊框分為三個(gè)部分:四邊框(用來設(shè)置可視區(qū)域與區(qū)域)+四條虛線(只用來顯示)+八個(gè)小圓圈(用來斜角拖拉)。

所以要建立三個(gè)字段,用來分別保存這個(gè)數(shù)據(jù)。

Rectangle[] smallRects = new Rectangle[8];//邊框中的八個(gè)小圓圈

Rectangle[] sideRects = new Rectangle[4];//四條邊框,用來做響應(yīng)區(qū)域

Point[] linePoints = new Point[5];//四條邊,用于畫虛線

接著就是創(chuàng)建用戶控件的可視區(qū)域,和上面的三個(gè)變量數(shù)值。

(以下計(jì)算位置的代碼,有興趣的人可以研究下,沒有的就直接Copy)

創(chuàng)建邊框

1 #region 創(chuàng)建邊框

2 ///

3 ///建立控件可視區(qū)域4 ///

5 private voidCreateBounds()6 {7 //創(chuàng)建邊界

8 int X = baseControl.Bounds.X - square.Width - 1;9 int Y = baseControl.Bounds.Y - square.Height - 1;10 int Height = baseControl.Bounds.Height + (square.Height * 2) + 2;11 int Width = baseControl.Bounds.Width + (square.Width * 2) + 2;12 this.Bounds = newRectangle(X, Y, Width, Height);13 this.BringToFront();14 SetRectangles();15 //設(shè)置可視區(qū)域

16 this.Region = newRegion(BuildFrame());17 g = this.CreateGraphics();18 }19

20 ///

21 ///設(shè)置定義8個(gè)小矩形的范圍22 ///

23 voidSetRectangles()24 {25 //左上

26 smallRects[0] = new Rectangle(new Point(0, 0), square);27 //右上

28 smallRects[1] = new Rectangle(new Point(this.Width - square.Width - 1, 0), square);29 //左下

30 smallRects[2] = new Rectangle(new Point(0, this.Height - square.Height - 1), square);31 //右下

32 smallRects[3] = new Rectangle(new Point(this.Width - square.Width - 1, this.Height - square.Height - 1), square);33 //上中

34 smallRects[4] = new Rectangle(new Point(this.Width / 2 - 1, 0), square);35 //下中

36 smallRects[5] = new Rectangle(new Point(this.Width / 2 - 1, this.Height - square.Height - 1), square);37 //左中

38 smallRects[6] = new Rectangle(new Point(0, this.Height / 2 - 1), square);39 //右中

40 smallRects[7] = new Rectangle(new Point(square.Width + baseControl.Width + 1, this.Height / 2 - 1), square);41

42 //四條邊線43 //左上

44 linePoints[0] = new Point(square.Width / 2, square.Height / 2);45 //右上

46 linePoints[1] = new Point(this.Width - square.Width / 2 - 1, square.Height / 2);47 //右下

48 linePoints[2] = new Point(this.Width - square.Width / 2 - 1, this.Height - square.Height / 2);49 //左下

50 linePoints[3] = new Point(square.Width / 2, this.Height - square.Height / 2 - 1);51 //左上

52 linePoints[4] = new Point(square.Width / 2, square.Height / 2);53

54 //整個(gè)包括周圍邊框的范圍

55 ControlRect = new Rectangle(new Point(0, 0), this.Bounds.Size);56 }57

58 ///

59 ///設(shè)置邊框控件可視區(qū)域60 ///

61 ///

62 privateGraphicsPath BuildFrame()63 {64 GraphicsPath path = newGraphicsPath();65 //上邊框

66 sideRects[0] = new Rectangle(0, 0, this.Width - square.Width - 1, square.Height + 1);67 //左邊框

68 sideRects[1] = new Rectangle(0, square.Height + 1, square.Width + 1, this.Height - square.Height - 1);69 //下邊框

70 sideRects[2] = new Rectangle(square.Width + 1, this.Height - square.Height - 1, this.Width - square.Width - 1, square.Height + 1);71 //右邊框

72 sideRects[3] = new Rectangle(this.Width - square.Width - 1, 0, square.Width + 1, this.Height - square.Height - 1);73

74 path.AddRectangle(sideRects[0]);75 path.AddRectangle(sideRects[1]);76 path.AddRectangle(sideRects[2]);77 path.AddRectangle(sideRects[3]);78 returnpath;79 }80 #endregion

設(shè)置完位置后,接著就是繪制的工作。增加一個(gè)Draw的方法用來畫,同時(shí)設(shè)置為Public。此處不用控件的Paint,而是讓用戶調(diào)用,只因?yàn)檫@樣方便在不同控件之間切換,也就是一個(gè)容器中,只有當(dāng)前控件有邊框。

1 ///

2 ///繪圖3 ///

4 public voidDraw()5 {6 this.BringToFront();7 Pen pen = newPen(Color.Black);8 pen.DashStyle = DashStyle.Dot;//設(shè)置為虛線,用虛線畫四邊,模擬微軟效果

9 g.DrawLines(pen, linePoints);//繪制四條邊線

10 g.FillRectangles(Brushes.White, smallRects); //填充8個(gè)小矩形的內(nèi)部

11 foreach (Rectangle smallRect insmallRects)12 {13 g.DrawEllipse(Pens.Black, smallRect); //繪制8個(gè)小橢圓

14 }15 //g.DrawRectangles(Pens.Black, smallRects);//繪制8個(gè)小矩形的黑色邊線

16 }

做到這里,我們可以去前臺(tái)看一下效果,不過再此之前,我們需要調(diào)用該用戶控件。

調(diào)用的地方就是在控件上點(diǎn)擊的時(shí)候,所以在MoveControl中加入MouseClick的事件。

1 ///

2 ///鼠標(biāo)單擊事件:用來顯示邊框3 ///

4 ///

5 ///

6 protected void MouseClick(objectsender, MouseEventArgs e)7 {8 this.currentControl.Parent.Refresh();//刷新父容器,清除掉其他控件的邊框

9 this.currentControl.BringToFront();10 fc = new FrameControl(this.currentControl);11 this.currentControl.Parent.Controls.Add(fc);12 fc.Visible = true;13 fc.Draw();14 }

這時(shí)有了邊框之后會(huì)有一個(gè)小問題,就是拖動(dòng)控件的時(shí)候,控件移動(dòng)了,但是邊框還留在原地。

所以,這里需要注意的,就是移動(dòng)的時(shí)候,將邊框控件隱藏掉,當(dāng)MouseUp的時(shí)候再顯示。

此時(shí)的完整代碼如下:

MoveControl

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Text;4 usingSystem.Windows.Forms;5 usingSystem.Drawing;6

7 namespaceDragControl8 {9 public classMoveControl10 {11 #region Constructors

12 publicMoveControl(Control ctrl)13 {14 currentControl =ctrl;15 AddEvents();16 }17 #endregion

18

19 #region Fields

20 private Control currentControl; //傳入的控件

21 private Point pPoint; //上個(gè)鼠標(biāo)坐標(biāo)

22 private Point cPoint; //當(dāng)前鼠標(biāo)坐標(biāo)

23 FrameControl fc;//邊框控件

24 #endregion

25

26 #region Properties

27

28 #endregion

29

30 #region Methods

31 ///

32 ///掛載事件33 ///

34 private voidAddEvents()35 {36 currentControl.MouseClick += newMouseEventHandler(MouseClick);37 currentControl.MouseDown += newMouseEventHandler(MouseDown);38 currentControl.MouseMove += newMouseEventHandler(MouseMove);39 currentControl.MouseUp += newMouseEventHandler(MouseUp);40 }41

42 ///

43 ///繪制拖拉時(shí)的黑色邊框44 ///

45 public static voidDrawDragBound(Control ctrl)46 {47 ctrl.Refresh();48 Graphics g =ctrl.CreateGraphics();49 int width =ctrl.Width;50 int height =ctrl.Height;51 Point[] ps = new Point[5]{new Point(0,0),new Point(width -1,0),52 new Point(width -1,height -1),new Point(0,height-1),new Point(0,0)};53 g.DrawLines(newPen(Color.Black), ps);54 }55 #endregion

56

57 #region Events

58 ///

59 ///鼠標(biāo)單擊事件:用來顯示邊框60 ///

61 ///

62 ///

63 protected void MouseClick(objectsender, MouseEventArgs e)64 {65 this.currentControl.Parent.Refresh();//刷新父容器,清除掉其他控件的邊框

66 this.currentControl.BringToFront();67 fc = new FrameControl(this.currentControl);68 this.currentControl.Parent.Controls.Add(fc);69 fc.Visible = true;70 fc.Draw();71 }72

73 ///

74 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)75 ///

76 void MouseDown(objectsender, MouseEventArgs e)77 {78 pPoint =Cursor.Position;79 }80

81 ///

82 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)83 ///

84 void MouseMove(objectsender, MouseEventArgs e)85 {86 Cursor.Current = Cursors.SizeAll; //當(dāng)鼠標(biāo)處于控件內(nèi)部時(shí),顯示光標(biāo)樣式為SizeAll87 //當(dāng)鼠標(biāo)左鍵按下時(shí)才觸發(fā)

88 if (e.Button ==MouseButtons.Left)89 {90 MoveControl.DrawDragBound(this.currentControl);91 if (fc != null) fc.Visible = false; //先隱藏

92 cPoint = Cursor.Position; //獲得當(dāng)前鼠標(biāo)位置

93 int x = cPoint.X -pPoint.X;94 int y = cPoint.Y -pPoint.Y;95 currentControl.Location = new Point(currentControl.Location.X + x, currentControl.Location.Y +y);96 pPoint =cPoint;97 }98 }99

100 ///

101 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)102 ///

103 void MouseUp(objectsender, MouseEventArgs e)104 {105 this.currentControl.Refresh();106 if (fc != null)107 {108 fc.Visible = true;109 fc.Draw();110 }111 }112 #endregion

113 }114 }

FrameControl

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.ComponentModel;4 usingSystem.Drawing;5 usingSystem.Data;6 usingSystem.Text;7 usingSystem.Windows.Forms;8 usingSystem.Drawing.Drawing2D;9

10 namespaceDragControl11 {12 public partial classFrameControl : UserControl13 {14 #region Constructors

15 publicFrameControl(Control ctrl)16 {17 baseControl =ctrl;18 AddEvents();19 CreateBounds();20 }21 #endregion

22

23 #region Fields

24 const int Band = 6; //調(diào)整大小的響應(yīng)邊框

25 Size square = new Size(Band, Band);//小矩形大小

26 Control baseControl; //基礎(chǔ)控件,即被包圍的控件

27 Rectangle[] smallRects = new Rectangle[8];//邊框中的八個(gè)小圓圈

28 Rectangle[] sideRects = new Rectangle[4];//四條邊框,用來做響應(yīng)區(qū)域

29 Point[] linePoints = new Point[5];//四條邊,用于畫虛線

30 Graphics g; //畫圖板

31 Rectangle ControlRect; //控件包含邊框的區(qū)域

32 #endregion

33

34 #region Methods

35 ///

36 ///加載事件37 ///

38 private voidAddEvents()39 {40 this.Name = "FrameControl" +baseControl.Name;41 this.MouseDown += newMouseEventHandler(FrameControl_MouseDown);42 this.MouseMove += newMouseEventHandler(FrameControl_MouseMove);43 this.MouseUp += newMouseEventHandler(FrameControl_MouseUp);44 }45

46 #region 創(chuàng)建邊框

47 ///

48 ///建立控件可視區(qū)域49 ///

50 private voidCreateBounds()51 {52 //創(chuàng)建邊界

53 int X = baseControl.Bounds.X - square.Width - 1;54 int Y = baseControl.Bounds.Y - square.Height - 1;55 int Height = baseControl.Bounds.Height + (square.Height * 2) + 2;56 int Width = baseControl.Bounds.Width + (square.Width * 2) + 2;57 this.Bounds = newRectangle(X, Y, Width, Height);58 this.BringToFront();59 SetRectangles();60 //設(shè)置可視區(qū)域

61 this.Region = newRegion(BuildFrame());62 g = this.CreateGraphics();63 }64

65 ///

66 ///設(shè)置定義8個(gè)小矩形的范圍67 ///

68 voidSetRectangles()69 {70 //左上

71 smallRects[0] = new Rectangle(new Point(0, 0), square);72 //右上

73 smallRects[1] = new Rectangle(new Point(this.Width - square.Width - 1, 0), square);74 //左下

75 smallRects[2] = new Rectangle(new Point(0, this.Height - square.Height - 1), square);76 //右下

77 smallRects[3] = new Rectangle(new Point(this.Width - square.Width - 1, this.Height - square.Height - 1), square);78 //上中

79 smallRects[4] = new Rectangle(new Point(this.Width / 2 - 1, 0), square);80 //下中

81 smallRects[5] = new Rectangle(new Point(this.Width / 2 - 1, this.Height - square.Height - 1), square);82 //左中

83 smallRects[6] = new Rectangle(new Point(0, this.Height / 2 - 1), square);84 //右中

85 smallRects[7] = new Rectangle(new Point(square.Width + baseControl.Width + 1, this.Height / 2 - 1), square);86

87 //四條邊線88 //左上

89 linePoints[0] = new Point(square.Width / 2, square.Height / 2);90 //右上

91 linePoints[1] = new Point(this.Width - square.Width / 2 - 1, square.Height / 2);92 //右下

93 linePoints[2] = new Point(this.Width - square.Width / 2 - 1, this.Height - square.Height / 2);94 //左下

95 linePoints[3] = new Point(square.Width / 2, this.Height - square.Height / 2 - 1);96 //左上

97 linePoints[4] = new Point(square.Width / 2, square.Height / 2);98

99 //整個(gè)包括周圍邊框的范圍

100 ControlRect = new Rectangle(new Point(0, 0), this.Bounds.Size);101 }102

103 ///

104 ///設(shè)置邊框控件可視區(qū)域105 ///

106 ///

107 privateGraphicsPath BuildFrame()108 {109 GraphicsPath path = newGraphicsPath();110 //上邊框

111 sideRects[0] = new Rectangle(0, 0, this.Width - square.Width - 1, square.Height + 1);112 //左邊框

113 sideRects[1] = new Rectangle(0, square.Height + 1, square.Width + 1, this.Height - square.Height - 1);114 //下邊框

115 sideRects[2] = new Rectangle(square.Width + 1, this.Height - square.Height - 1, this.Width - square.Width - 1, square.Height + 1);116 //右邊框

117 sideRects[3] = new Rectangle(this.Width - square.Width - 1, 0, square.Width + 1, this.Height - square.Height - 1);118

119 path.AddRectangle(sideRects[0]);120 path.AddRectangle(sideRects[1]);121 path.AddRectangle(sideRects[2]);122 path.AddRectangle(sideRects[3]);123 returnpath;124 }125 #endregion

126

127 ///

128 ///繪圖129 ///

130 public voidDraw()131 {132 this.BringToFront();133 Pen pen = newPen(Color.Black);134 pen.DashStyle = DashStyle.Dot;//設(shè)置為虛線,用虛線畫四邊,模擬微軟效果

135 g.DrawLines(pen, linePoints);//繪制四條邊線

136 g.FillRectangles(Brushes.White, smallRects); //填充8個(gè)小矩形的內(nèi)部

137 foreach (Rectangle smallRect insmallRects)138 {139 g.DrawEllipse(Pens.Black, smallRect); //繪制8個(gè)小橢圓

140 }141 //g.DrawRectangles(Pens.Black, smallRects);//繪制8個(gè)小矩形的黑色邊線

142 }143

144 #endregion

145

146 #region Events

147 ///

148 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)149 ///

150 void FrameControl_MouseDown(objectsender, MouseEventArgs e)151 {152

153 }154

155 ///

156 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)157 ///

158 void FrameControl_MouseMove(objectsender, MouseEventArgs e)159 {160

161 }162

163 ///

164 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)165 ///

166 void FrameControl_MouseUp(objectsender, MouseEventArgs e)167 {168

169 }170 #endregion

171 }172 }

測(cè)試界面:

到目前為止,還只是有邊框,下面將實(shí)現(xiàn)拖拉功能。

首先來實(shí)現(xiàn),當(dāng)鼠標(biāo)放在響應(yīng)區(qū)域的時(shí)候,根據(jù)不同的位置顯示不同的箭頭樣子。

為此先創(chuàng)建一個(gè)枚舉,用來記錄當(dāng)前鼠標(biāo)的位置,等拖拉的時(shí)候根據(jù)該枚舉值做不同的計(jì)算。

1 ///

2 ///鼠標(biāo)在控件中位置3 ///

4 enumMousePosOnCtrl5 {6 NONE = 0,7 TOP = 1,8 RIGHT = 2,9 BOTTOM = 3,10 LEFT = 4,11 TOPLEFT = 5,12 TOPRIGHT = 6,13 BOTTOMLEFT = 7,14 BOTTOMRIGHT = 8,15 }

創(chuàng)建一個(gè)方法,用來改變光標(biāo)的樣子以及枚舉值

1 ///

2 ///設(shè)置光標(biāo)狀態(tài)3 ///

4 public bool SetCursorShape(int x, inty)5 {6 Point point = newPoint(x, y);7 if (!ControlRect.Contains(point))8 {9 Cursor.Current =Cursors.Arrow;10 return false;11 }12 else if (smallRects[0].Contains(point))13 {14 Cursor.Current =Cursors.SizeNWSE;15 mpoc =MousePosOnCtrl.TOPLEFT;16 }17 else if (smallRects[1].Contains(point))18 {19 Cursor.Current =Cursors.SizeNESW;20 mpoc =MousePosOnCtrl.TOPRIGHT;21 }22 else if (smallRects[2].Contains(point))23 {24 Cursor.Current =Cursors.SizeNESW;25 mpoc =MousePosOnCtrl.BOTTOMLEFT;26 }27 else if (smallRects[3].Contains(point))28 {29 Cursor.Current =Cursors.SizeNWSE;30 mpoc =MousePosOnCtrl.BOTTOMRIGHT;31 }32 else if (sideRects[0].Contains(point))33 {34 Cursor.Current =Cursors.SizeNS;35 mpoc =MousePosOnCtrl.TOP;36 }37 else if (sideRects[1].Contains(point))38 {39 Cursor.Current =Cursors.SizeWE;40 mpoc =MousePosOnCtrl.LEFT;41 }42 else if (sideRects[2].Contains(point))43 {44 Cursor.Current =Cursors.SizeNS;45 mpoc =MousePosOnCtrl.BOTTOM;46 }47 else if (sideRects[3].Contains(point))48 {49 Cursor.Current =Cursors.SizeWE;50 mpoc =MousePosOnCtrl.RIGHT;51 }52 else

53 {54 Cursor.Current =Cursors.Arrow;55 }56 return true;57 }

接著就是處理相關(guān)的三大事件MouseDown、MouseMove、MouseUp來實(shí)現(xiàn)拖拉。如同MoveControl都要增加以下兩個(gè)字段。

private Point pPoint; //上個(gè)鼠標(biāo)坐標(biāo)

private Point cPoint; //當(dāng)前鼠標(biāo)坐標(biāo)

1 ///

2 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)3 ///

4 void FrameControl_MouseDown(objectsender, MouseEventArgs e)5 {6 pPoint =Cursor.Position;7 }8

9 ///

10 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)11 ///

12 void FrameControl_MouseMove(objectsender, MouseEventArgs e)13 {14 if (e.Button ==MouseButtons.Left)15 {16 this.Visible = false;17 MoveControl.DrawDragBound(baseControl);18 ControlMove();19 }20 else

21 {22 this.Visible = true;23 SetCursorShape(e.X, e.Y); //更新鼠標(biāo)指針樣式

24 }25 }26

27 ///

28 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)29 ///

30 void FrameControl_MouseUp(objectsender, MouseEventArgs e)31 {32 this.baseControl.Refresh(); //刷掉黑色邊框

33 this.Visible = true;34 CreateBounds();35 Draw();36 }

在上面的MouseMove中多了一個(gè)方法--ControlMove,這個(gè)就是根據(jù)不同的枚舉值,計(jì)算控件的移動(dòng)方式和大小的方法。該方法中同時(shí)對(duì)控件的最小寬度和高度做了處理。添加如下兩個(gè)字段。

private int MinWidth = 20; //最小寬度

private int MinHeight = 20;//最小高度

1 ///

2 ///控件移動(dòng)3 ///

4 private voidControlMove()5 {6 cPoint =Cursor.Position;7 int x = cPoint.X -pPoint.X;8 int y = cPoint.Y -pPoint.Y;9 switch (this.mpoc)10 {11 caseMousePosOnCtrl.TOP:12 if (baseControl.Height - y >MinHeight)13 {14 baseControl.Top +=y;15 baseControl.Height -=y;16 }17 else

18 {19 baseControl.Top -= MinHeight -baseControl.Height;20 baseControl.Height =MinHeight;21 }22 break;23 caseMousePosOnCtrl.BOTTOM:24 if (baseControl.Height + y >MinHeight)25 {26 baseControl.Height +=y;27 }28 else

29 {30 baseControl.Height =MinHeight;31 }32 break;33 caseMousePosOnCtrl.LEFT:34 if (baseControl.Width - x >MinWidth)35 {36 baseControl.Left +=x;37 baseControl.Width -=x;38 }39 else

40 {41 baseControl.Left -= MinWidth -baseControl.Width;42 baseControl.Width =MinWidth;43 }44

45 break;46 caseMousePosOnCtrl.RIGHT:47 if (baseControl.Width + x >MinWidth)48 {49 baseControl.Width +=x;50 }51 else

52 {53 baseControl.Width =MinWidth;54 }55 break;56 caseMousePosOnCtrl.TOPLEFT:57 if (baseControl.Height - y >MinHeight)58 {59 baseControl.Top +=y;60 baseControl.Height -=y;61 }62 else

63 {64 baseControl.Top -= MinHeight -baseControl.Height;65 baseControl.Height =MinHeight;66 }67 if (baseControl.Width - x >MinWidth)68 {69 baseControl.Left +=x;70 baseControl.Width -=x;71 }72 else

73 {74 baseControl.Left -= MinWidth -baseControl.Width;75 baseControl.Width =MinWidth;76 }77 break;78 caseMousePosOnCtrl.TOPRIGHT:79 if (baseControl.Height - y >MinHeight)80 {81 baseControl.Top +=y;82 baseControl.Height -=y;83 }84 else

85 {86 baseControl.Top -= MinHeight -baseControl.Height;87 baseControl.Height =MinHeight;88 }89 if (baseControl.Width + x >MinWidth)90 {91 baseControl.Width +=x;92 }93 else

94 {95 baseControl.Width =MinWidth;96 }97 break;98 caseMousePosOnCtrl.BOTTOMLEFT:99 if (baseControl.Height + y >MinHeight)100 {101 baseControl.Height +=y;102 }103 else

104 {105 baseControl.Height =MinHeight;106 }107 if (baseControl.Width - x >MinWidth)108 {109 baseControl.Left +=x;110 baseControl.Width -=x;111 }112 else

113 {114 baseControl.Left -= MinWidth -baseControl.Width;115 baseControl.Width =MinWidth;116 }117 break;118 caseMousePosOnCtrl.BOTTOMRIGHT:119 if (baseControl.Height + y >MinHeight)120 {121 baseControl.Height +=y;122 }123 else

124 {125 baseControl.Height =MinHeight;126 }127 if (baseControl.Width + x >MinWidth)128 {129 baseControl.Width +=x;130 }131 else

132 {133 baseControl.Width =MinWidth;134 }135 break;136

137 }138 pPoint =Cursor.Position;139 }

到此為止,功能已經(jīng)基本上實(shí)現(xiàn)。

完成代碼如下:

MoveControl

1 /******************************************************************2 * 創(chuàng) 建 人: SamWang3 * 創(chuàng)建時(shí)間: 2012-5-10 16:064 * 描 述:5 * 移動(dòng)控件但不改變大小6 * 原 理:7 * 版 本: V1.08 * 環(huán) 境: VS20109 ******************************************************************/

10 usingSystem;11 usingSystem.Collections.Generic;12 usingSystem.Linq;13 usingSystem.Text;14 usingSystem.Windows.Forms;15 usingSystem.Drawing;16

17 namespaceDragControl18 {19 public classMoveControl20 {21 #region Constructors

22 publicMoveControl(Control ctrl)23 {24 currentControl =ctrl;25 AddEvents();26 }27 #endregion

28

29 #region Fields

30 private Control currentControl; //傳入的控件

31 private Point pPoint; //上個(gè)鼠標(biāo)坐標(biāo)

32 private Point cPoint; //當(dāng)前鼠標(biāo)坐標(biāo)

33 FrameControl fc;//邊框控件

34 #endregion

35

36 #region Properties

37

38 #endregion

39

40 #region Methods

41 ///

42 ///掛載事件43 ///

44 private voidAddEvents()45 {46 currentControl.MouseClick += newMouseEventHandler(MouseClick);47 currentControl.MouseDown += newMouseEventHandler(MouseDown);48 currentControl.MouseMove += newMouseEventHandler(MouseMove);49 currentControl.MouseUp += newMouseEventHandler(MouseUp);50 }51

52 ///

53 ///繪制拖拉時(shí)的黑色邊框54 ///

55 public static voidDrawDragBound(Control ctrl)56 {57 ctrl.Refresh();58 Graphics g =ctrl.CreateGraphics();59 int width =ctrl.Width;60 int height =ctrl.Height;61 Point[] ps = new Point[5]{new Point(0,0),new Point(width -1,0),62 new Point(width -1,height -1),new Point(0,height-1),new Point(0,0)};63 g.DrawLines(newPen(Color.Black), ps);64 }65

66 #endregion

67

68 #region Events

69 ///

70 ///鼠標(biāo)單擊事件:用來顯示邊框71 ///

72 ///

73 ///

74 protected void MouseClick(objectsender, MouseEventArgs e)75 {76 this.currentControl.Parent.Refresh();//刷新父容器,清除掉其他控件的邊框

77 this.currentControl.BringToFront();78 fc = new FrameControl(this.currentControl);79 this.currentControl.Parent.Controls.Add(fc);80 fc.Visible = true;81 fc.Draw();82 }83

84 ///

85 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)86 ///

87 void MouseDown(objectsender, MouseEventArgs e)88 {89 pPoint =Cursor.Position;90 }91

92 ///

93 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)94 ///

95 void MouseMove(objectsender, MouseEventArgs e)96 {97 Cursor.Current = Cursors.SizeAll; //當(dāng)鼠標(biāo)處于控件內(nèi)部時(shí),顯示光標(biāo)樣式為SizeAll98 //當(dāng)鼠標(biāo)左鍵按下時(shí)才觸發(fā)

99 if (e.Button ==MouseButtons.Left)100 {101 MoveControl.DrawDragBound(this.currentControl);102 if(fc != null ) fc.Visible = false; //先隱藏

103 cPoint = Cursor.Position;//獲得當(dāng)前鼠標(biāo)位置

104 int x = cPoint.X -pPoint.X;105 int y = cPoint.Y -pPoint.Y;106 currentControl.Location = new Point(currentControl.Location.X + x, currentControl.Location.Y +y);107 pPoint =cPoint;108 }109 }110

111 ///

112 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)113 ///

114 void MouseUp(objectsender, MouseEventArgs e)115 {116 this.currentControl.Refresh();117 if (fc != null)118 {119 fc.Visible = true;120 fc.Draw();121 }122 }123 #endregion

124 }125 }

FrameControl

1 /******************************************************************2 * 創(chuàng) 建 人: SamWang3 * 創(chuàng)建時(shí)間: 2012-5-10 17:004 * 描 述:5 * 在控件外部加上邊框,用于拖拉,以改變內(nèi)部控件的大小6 * 原 理:7 * 版 本: V1.08 * 環(huán) 境: VS20109 ******************************************************************/

10 usingSystem;11 usingSystem.Collections.Generic;12 usingSystem.Text;13 usingSystem.Windows.Forms;14 usingSystem.Drawing;15 usingSystem.Drawing.Drawing2D;16

17 namespaceDragControl18 {19 public classFrameControl : UserControl20 {21 #region Constructors

22 ///

23 ///構(gòu)造函數(shù)24 ///

25 publicFrameControl(Control ctrl)26 {27 baseControl =ctrl;28 AddEvents();29 CreateBounds();30 }31 #endregion

32

33 #region Fields

34 const int Band = 6; //調(diào)整大小的響應(yīng)邊框

35 private int MinWidth = 20; //最小寬度

36 private int MinHeight = 20;//最小高度

37 Size square = new Size(Band, Band);//小矩形大小

38 Control baseControl; //基礎(chǔ)控件,即被包圍的控件

39 Rectangle[] smallRects = new Rectangle[8];//邊框中的八個(gè)小圓圈

40 Rectangle[] sideRects = new Rectangle[4];//四條邊框,用來做響應(yīng)區(qū)域

41 Point[] linePoints = new Point[5];//四條邊,用于畫虛線

42 Graphics g; //畫圖板

43 Rectangle ControlRect; //控件包含邊框的區(qū)域

44 private Point pPoint; //上個(gè)鼠標(biāo)坐標(biāo)

45 private Point cPoint; //當(dāng)前鼠標(biāo)坐標(biāo)

46 privateMousePosOnCtrl mpoc;47 #endregion

48

49 #region Properties

50 ///

51 ///鼠標(biāo)在控件中位置52 ///

53 enumMousePosOnCtrl54 {55 NONE = 0,56 TOP = 1,57 RIGHT = 2,58 BOTTOM = 3,59 LEFT = 4,60 TOPLEFT = 5,61 TOPRIGHT = 6,62 BOTTOMLEFT = 7,63 BOTTOMRIGHT = 8,64 }65 #endregion

66

67 #region Methods

68 ///

69 ///加載事件70 ///

71 private voidAddEvents()72 {73 this.Name = "FrameControl" +baseControl.Name;74 this.MouseDown += newMouseEventHandler(FrameControl_MouseDown);75 this.MouseMove += newMouseEventHandler(FrameControl_MouseMove);76 this.MouseUp += newMouseEventHandler(FrameControl_MouseUp);77 }78

79 #region 創(chuàng)建邊框

80 ///

81 ///建立控件可視區(qū)域82 ///

83 private voidCreateBounds()84 {85 //創(chuàng)建邊界

86 int X = baseControl.Bounds.X - square.Width - 1;87 int Y = baseControl.Bounds.Y - square.Height - 1;88 int Height = baseControl.Bounds.Height + (square.Height * 2) + 2;89 int Width = baseControl.Bounds.Width + (square.Width * 2) + 2;90 this.Bounds = newRectangle(X, Y, Width, Height);91 this.BringToFront();92 SetRectangles();93 //設(shè)置可視區(qū)域

94 this.Region = newRegion(BuildFrame());95 g = this.CreateGraphics();96 }97

98 ///

99 ///設(shè)置定義8個(gè)小矩形的范圍100 ///

101 voidSetRectangles()102 {103 //左上

104 smallRects[0] = new Rectangle(new Point(0, 0), square);105 //右上

106 smallRects[1] = new Rectangle(new Point(this.Width - square.Width - 1, 0), square);107 //左下

108 smallRects[2] = new Rectangle(new Point(0, this.Height - square.Height - 1), square);109 //右下

110 smallRects[3] = new Rectangle(new Point(this.Width - square.Width - 1, this.Height - square.Height - 1), square);111 //上中

112 smallRects[4] = new Rectangle(new Point(this.Width / 2 - 1, 0), square);113 //下中

114 smallRects[5] = new Rectangle(new Point(this.Width / 2 - 1, this.Height - square.Height - 1), square);115 //左中

116 smallRects[6] = new Rectangle(new Point(0, this.Height / 2 - 1), square);117 //右中

118 smallRects[7] = new Rectangle(new Point(square.Width + baseControl.Width + 1, this.Height / 2 - 1), square);119

120 //四條邊線121 //左上

122 linePoints[0] = new Point(square.Width / 2, square.Height / 2);123 //右上

124 linePoints[1] = new Point(this.Width - square.Width / 2 - 1, square.Height / 2);125 //右下

126 linePoints[2] = new Point(this.Width - square.Width / 2 - 1, this.Height - square.Height / 2);127 //左下

128 linePoints[3] = new Point(square.Width / 2, this.Height - square.Height / 2 - 1);129 //左上

130 linePoints[4] = new Point(square.Width / 2, square.Height / 2);131

132 //整個(gè)包括周圍邊框的范圍

133 ControlRect = new Rectangle(new Point(0, 0), this.Bounds.Size);134 }135

136 ///

137 ///設(shè)置邊框控件可視區(qū)域138 ///

139 ///

140 privateGraphicsPath BuildFrame()141 {142 GraphicsPath path = newGraphicsPath();143 //上邊框

144 sideRects[0] = new Rectangle(0, 0, this.Width - square.Width - 1, square.Height + 1);145 //左邊框

146 sideRects[1] = new Rectangle(0, square.Height + 1, square.Width + 1, this.Height - square.Height - 1);147 //下邊框

148 sideRects[2] = new Rectangle(square.Width + 1, this.Height - square.Height - 1, this.Width - square.Width - 1, square.Height + 1);149 //右邊框

150 sideRects[3] = new Rectangle(this.Width - square.Width - 1, 0, square.Width + 1, this.Height - square.Height - 1);151

152 path.AddRectangle(sideRects[0]);153 path.AddRectangle(sideRects[1]);154 path.AddRectangle(sideRects[2]);155 path.AddRectangle(sideRects[3]);156 returnpath;157 }158 #endregion

159

160 ///

161 ///繪圖162 ///

163 public voidDraw()164 {165 this.BringToFront();166 //g.FillRectangles(Brushes.LightGray, sideRects);//填充四條邊框的內(nèi)部

167 Pen pen = newPen(Color.Black);168 pen.DashStyle = DashStyle.Dot;//設(shè)置為虛線,用虛線畫四邊,模擬微軟效果

169 g.DrawLines(pen, linePoints);//繪制四條邊線

170 g.FillRectangles(Brushes.White, smallRects); //填充8個(gè)小矩形的內(nèi)部

171 foreach (Rectangle smallRect insmallRects)172 {173 g.DrawEllipse(Pens.Black, smallRect); //繪制8個(gè)小橢圓

174 }175 //g.DrawRectangles(Pens.Black, smallRects);//繪制8個(gè)小矩形的黑色邊線

176 }177

178 ///

179 ///設(shè)置光標(biāo)狀態(tài)180 ///

181 public bool SetCursorShape(int x, inty)182 {183 Point point = newPoint(x, y);184 if (!ControlRect.Contains(point))185 {186 Cursor.Current =Cursors.Arrow;187 return false;188 }189 else if (smallRects[0].Contains(point))190 {191 Cursor.Current =Cursors.SizeNWSE;192 mpoc =MousePosOnCtrl.TOPLEFT;193 }194 else if (smallRects[1].Contains(point))195 {196 Cursor.Current =Cursors.SizeNESW;197 mpoc =MousePosOnCtrl.TOPRIGHT;198 }199 else if (smallRects[2].Contains(point))200 {201 Cursor.Current =Cursors.SizeNESW;202 mpoc =MousePosOnCtrl.BOTTOMLEFT;203 }204 else if (smallRects[3].Contains(point))205 {206 Cursor.Current =Cursors.SizeNWSE;207 mpoc =MousePosOnCtrl.BOTTOMRIGHT;208 }209 else if (sideRects[0].Contains(point))210 {211 Cursor.Current =Cursors.SizeNS;212 mpoc =MousePosOnCtrl.TOP;213 }214 else if (sideRects[1].Contains(point))215 {216 Cursor.Current =Cursors.SizeWE;217 mpoc =MousePosOnCtrl.LEFT;218 }219 else if (sideRects[2].Contains(point))220 {221 Cursor.Current =Cursors.SizeNS;222 mpoc =MousePosOnCtrl.BOTTOM;223 }224 else if (sideRects[3].Contains(point))225 {226 Cursor.Current =Cursors.SizeWE;227 mpoc =MousePosOnCtrl.RIGHT;228 }229 else

230 {231 Cursor.Current =Cursors.Arrow;232 }233 return true;234 }235

236 ///

237 ///控件移動(dòng)238 ///

239 private voidControlMove()240 {241 cPoint =Cursor.Position;242 int x = cPoint.X -pPoint.X;243 int y = cPoint.Y -pPoint.Y;244 switch (this.mpoc)245 {246 caseMousePosOnCtrl.TOP:247 if (baseControl.Height - y >MinHeight)248 {249 baseControl.Top +=y;250 baseControl.Height -=y;251 }252 else

253 {254 baseControl.Top -= MinHeight -baseControl.Height;255 baseControl.Height =MinHeight;256 }257 break;258 caseMousePosOnCtrl.BOTTOM:259 if (baseControl.Height + y >MinHeight)260 {261 baseControl.Height +=y;262 }263 else

264 {265 baseControl.Height =MinHeight;266 }267 break;268 caseMousePosOnCtrl.LEFT:269 if (baseControl.Width - x >MinWidth)270 {271 baseControl.Left +=x;272 baseControl.Width -=x;273 }274 else

275 {276 baseControl.Left -= MinWidth -baseControl.Width;277 baseControl.Width =MinWidth;278 }279

280 break;281 caseMousePosOnCtrl.RIGHT:282 if (baseControl.Width + x >MinWidth)283 {284 baseControl.Width +=x;285 }286 else

287 {288 baseControl.Width =MinWidth;289 }290 break;291 caseMousePosOnCtrl.TOPLEFT:292 if (baseControl.Height - y >MinHeight)293 {294 baseControl.Top +=y;295 baseControl.Height -=y;296 }297 else

298 {299 baseControl.Top -= MinHeight -baseControl.Height;300 baseControl.Height =MinHeight;301 }302 if (baseControl.Width - x >MinWidth)303 {304 baseControl.Left +=x;305 baseControl.Width -=x;306 }307 else

308 {309 baseControl.Left -= MinWidth -baseControl.Width;310 baseControl.Width =MinWidth;311 }312 break;313 caseMousePosOnCtrl.TOPRIGHT:314 if (baseControl.Height - y >MinHeight)315 {316 baseControl.Top +=y;317 baseControl.Height -=y;318 }319 else

320 {321 baseControl.Top -= MinHeight -baseControl.Height;322 baseControl.Height =MinHeight;323 }324 if (baseControl.Width + x >MinWidth)325 {326 baseControl.Width +=x;327 }328 else

329 {330 baseControl.Width =MinWidth;331 }332 break;333 caseMousePosOnCtrl.BOTTOMLEFT:334 if (baseControl.Height + y >MinHeight)335 {336 baseControl.Height +=y;337 }338 else

339 {340 baseControl.Height =MinHeight;341 }342 if (baseControl.Width - x >MinWidth)343 {344 baseControl.Left +=x;345 baseControl.Width -=x;346 }347 else

348 {349 baseControl.Left -= MinWidth -baseControl.Width;350 baseControl.Width =MinWidth;351 }352 break;353 caseMousePosOnCtrl.BOTTOMRIGHT:354 if (baseControl.Height + y >MinHeight)355 {356 baseControl.Height +=y;357 }358 else

359 {360 baseControl.Height =MinHeight;361 }362 if (baseControl.Width + x >MinWidth)363 {364 baseControl.Width +=x;365 }366 else

367 {368 baseControl.Width =MinWidth;369 }370 break;371

372 }373 pPoint =Cursor.Position;374 }375

376 #endregion

377

378 #region Events

379 ///

380 ///鼠標(biāo)按下事件:記錄當(dāng)前鼠標(biāo)相對(duì)窗體的坐標(biāo)381 ///

382 void FrameControl_MouseDown(objectsender, MouseEventArgs e)383 {384 pPoint =Cursor.Position;385 }386

387 ///

388 ///鼠標(biāo)移動(dòng)事件:讓控件跟著鼠標(biāo)移動(dòng)389 ///

390 void FrameControl_MouseMove(objectsender, MouseEventArgs e)391 {392 if (e.Button ==MouseButtons.Left)393 {394 this.Visible = false;395 MoveControl.DrawDragBound(baseControl);396 ControlMove();397 }398 else

399 {400 this.Visible = true;401 SetCursorShape(e.X, e.Y); //更新鼠標(biāo)指針樣式

402 }403 }404

405 ///

406 ///鼠標(biāo)彈起事件:讓自定義的邊框出現(xiàn)407 ///

408 void FrameControl_MouseUp(objectsender, MouseEventArgs e)409 {410 this.baseControl.Refresh(); //刷掉黑色邊框

411 this.Visible = true;412 CreateBounds();413 Draw();414 }415 #endregion

416 }417 }

四、遺留問題

1.ListBox存在拖拉高度時(shí),存在莫名奇妙的BUG。

2.目前該版本只支持單控件的拖拉,多控件同時(shí)拖拉等下次有空再弄。

五、附源代碼下載

SamWang

2012-05-14

作者:SamWang

出處:http://wangshenhe.cnblogs.com/

本文版權(quán)歸作者和博客園共有,歡迎圍觀轉(zhuǎn)載。轉(zhuǎn)載時(shí)請(qǐng)您務(wù)必在文章明顯位置給出原文鏈接,謝謝您的合作。

總結(jié)

以上是生活随笔為你收集整理的c#ovalshape_【原创】C# 实现拖拉控件改变位置与大小(SamWang)(附源代码下载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

一区二区三区精品在线 | 97超视频在线观看 | 西西444www大胆高清视频 | 欧美一区二区在线刺激视频 | 国产明星视频三级a三级点| 在线小视频你懂得 | 国产在线观看不卡 | 1000部国产精品成人观看 | 日韩在线视频二区 | 一区二区三区av在线 | 免费99| 日本久久不卡视频 | 国产伦精品一区二区三区… | 亚洲成人资源在线 | 亚洲精品网址在线观看 | 国产精品男女啪啪 | 日韩美女久久 | 成人午夜电影在线 | 成年人视频免费在线播放 | 97综合视频 | 色综合久久久久久中文网 | 久久av不卡| 国产亚洲精品久久久久5区 成人h电影在线观看 | 成人小电影在线看 | 久久久香蕉视频 | 国产精品自产拍 | 狠狠狠狠干| 欧美不卡视频在线 | 日韩亚洲在线视频 | 欧美99热 | 国产精品专区一 | 国产精品9区| 午夜久久久久久久久久影院 | 一区二区三区在线免费观看 | 国产999免费视频 | 亚洲欧洲国产日韩精品 | 精品九九久久 | 婷婷综合在线 | 欧美 亚洲 另类 激情 另类 | 天天亚洲| 精品国产一区二区在线 | 天天色 天天 | 久久网站av | 黄色一级大片在线免费看国产一 | 免费国产亚洲视频 | 激情av在线播放 | 五月婷婷久久综合 | av在线a| 亚洲精品理论 | 一级α片 | 在线免费观看的av网站 | 国产成人一区二区在线观看 | www.伊人网| 91最新在线视频 | 久久久久亚洲精品男人的天堂 | 国产69精品久久久久久 | 91成人免费 | 日韩欧美国产免费播放 | 激情欧美xxxx | 久久午夜国产精品 | 91影视成人 | 亚洲在线高清 | 国产高清在线永久 | 最近在线中文字幕 | 成人黄大片视频在线观看 | 久草在线资源免费 | 欧美综合国产 | 99综合电影在线视频 | 国产美女精品 | 婷五月天激情 | 激情网五月婷婷 | 天天天干夜夜夜操 | 欧美一级特黄aaaaaa大片在线观看 | 亚洲精品免费在线观看 | 日本中文字幕免费观看 | 久久久精品亚洲 | 成年人免费av | 综合中文字幕 | 色婷婷婷| 国产码电影 | 手机av在线不卡 | av午夜电影 | 久久久精品一区二区 | 精品一区二区三区在线播放 | 亚洲精品www久久久 www国产精品com | 九九免费观看全部免费视频 | 久久在现 | 久久综合狠狠综合久久综合88 | 国产一级二级在线播放 | 久久看片网 | 黄色av一级片 | 国产精品破处视频 | 久久国产美女视频 | av免费在线观看网站 | 欧美午夜理伦三级在线观看 | 久久久久久久久久久电影 | 中文字幕日韩无 | 在线亚洲人成电影网站色www | 91电影福利 | 国产精品一区免费在线观看 | 99超碰在线播放 | 久久久网页| 欧美日韩成人一区 | 中文字幕资源在线观看 | 色吧av色av| 亚洲91精品在线观看 | 国产一区精品在线观看 | 日韩在观看线 | 韩国精品在线 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 欧美日韩91 | 亚洲精品乱码久久久久久9色 | 国产人在线成免费视频 | 不卡的av在线播放 | 亚洲乱码久久久 | 国产精品原创av片国产免费 | 欧美日韩一区二区在线 | 日韩欧美精品在线视频 | 亚洲国产精品一区二区久久,亚洲午夜 | 97免费在线观看视频 | 国产一区高清在线观看 | 国产成人精品一区在线 | 久久精品一区二区三区四区 | 国产亚洲久一区二区 | www.久久免费视频 | 伊甸园av在线 | 久久网站免费 | 五月婷婷综合在线视频 | 在线观看的a站 | 日韩在线观看a | 91丨九色丨91啦蝌蚪老版 | 国产亚洲精品综合一区91 | 久久天天操 | 99久久夜色精品国产亚洲96 | 97视频人人澡人人爽 | 欧美热久久 | 奇米影音四色 | 久久五月婷婷综合 | 久久一区二 | 国产黄色观看 | 免费在线中文字幕 | 青青河边草观看完整版高清 | 91亚洲精 | 九九九热精品免费视频观看 | 蜜臀av性久久久久av蜜臀妖精 | 国产精品欧美久久久久无广告 | 精品在线一区二区 | 91x色| 婷婷中文字幕综合 | 五月天六月婷 | 久热国产视频 | av天天色 | 欧美精品在线免费 | 亚洲另类在线视频 | 一区二区三区四区五区在线 | 热久久精品在线 | 99精品成人| 中文字幕激情 | 日韩视频免费观看高清 | 96av在线| 不卡av在线 | 国产成人性色生活片 | 久久免费电影网 | 亚洲香蕉视频 | 色综合久久久久久久久五月 | 久久超碰在线 | 亚洲视频免费视频 | 中国黄色一级大片 | av7777777| 中文字幕乱码日本亚洲一区二区 | 久久久999精品视频 国产美女免费观看 | 免费成人黄色片 | 探花视频在线观看 | 免费av影视 | 一级片色播影院 | 久草在线一免费新视频 | 亚洲精品网站在线 | 日韩精品欧美精品 | 精品久久久久久国产 | 精品国精品自拍自在线 | 人人搞人人干 | 一区二区久久 | 成人h在线观看 | 久久国产精品99久久久久久进口 | 亚洲精品人人 | www五月天 | 国产精品久久久久久久久费观看 | 97精品国自产拍在线观看 | 欧美性色19p | 久草免费色站 | 国产一区二区三区久久久 | 国产午夜三级一二三区 | 天天插天天干天天操 | 99热精品国产一区二区在线观看 | 不卡av电影在线观看 | 欧美最新大片在线看 | 毛片美女网站 | 久久精品视频网 | 国产精品精品 | 国产黄在线观看 | 日韩高清国产精品 | 99热这里 | 夜夜躁天天躁很躁波 | 久一久久 | 成人午夜电影网站 | 亚洲日b视频 | 亚洲黄色在线观看 | 韩国av电影在线观看 | 五月激情天| 欧美精品乱码久久久久久 | av在线一级| 国产精品欧美久久久久久 | 黄色成人毛片 | 一级黄色片在线播放 | 日韩精品免费专区 | 久久短视频 | 久久亚洲欧美 | 日本精品一区二区在线观看 | 中文字幕一区二区三区在线播放 | www操操操| 丁香婷婷电影 | 6080yy精品一区二区三区 | 国内小视频在线观看 | 国产精品视频99 | 在线观看国产区 | 黄色三级视频片 | 天天av在线播放 | 九精品| 日日碰狠狠添天天爽超碰97久久 | 狠狠操欧美 | 一区二区三区日韩在线观看 | 国产亚洲精品久久久久久大师 | 久草视频免费观 | 美女视频久久黄 | 精品久久久久久一区二区里番 | 婷婷丁香激情 | 欧美性久久久久久 | 中文字幕精品一区二区精品 | 中文字幕在线观看一区 | 久热久草| 天天拍天天操 | 成人a毛片| 国内揄拍国内精品 | 91色在线观看 | 日韩在线 一区二区 | 日本xxxxav | 丁香视频五月 | 热久久免费视频精品 | 九九热久久免费视频 | 免费的黄色av | 亚洲精品乱码久久久久久高潮 | 国产一区 在线播放 | 成人在线一区二区三区 | 激情综合色播五月 | 一本一道久久a久久精品蜜桃 | 久久久免费视频播放 | 国产午夜精品久久 | 麻豆视频一区二区 | 天天操天天干天天玩 | 国产一级久久久 | 在线观看岛国片 | 成人av免费看 | 手机在线观看国产精品 | 免费在线观看av不卡 | 亚洲年轻女教师毛茸茸 | 人人爱夜夜操 | 波多野结衣网址 | 欧美黄色特级片 | 久久成人精品电影 | 日韩欧美在线影院 | 天天做天天爽 | 美女性爽视频国产免费app | 日本久久片 | 日韩av一区二区三区四区 | 亚洲综合成人婷婷小说 | 操天天操 | 久久精品视频网站 | 91成人精品 | 日韩精品在线看 | 91视频com| 久久99婷婷 | 国产精品资源网 | 人人cao| 欧美一级片免费观看 | 久久久久久久久电影 | 成人黄色小视频 | 日韩在线网址 | 中文视频一区二区 | 亚洲成av人影片在线观看 | 国产精品视频最多的网站 | 亚州精品视频 | 国产精品久久久久久久久岛 | 天天玩天天操天天射 | 久草免费在线观看 | 日韩精品久久中文字幕 | 亚洲精品久久久久www | 五月婷婷色播 | 啪一啪在线 | 国产精品99久久久久久久久 | 国产精品视频 | 色噜噜狠狠狠狠色综合久不 | 天天天天天天操 | 在线观看电影av | 婷婷伊人综合 | 天天操天天干天天爽 | 国产成人综合图片 | 日韩二区在线观看 | 97香蕉久久国产在线观看 | 狠狠网| 国产精品久久艹 | 成人av一级片 | 精品在线观看视频 | 新版资源中文在线观看 | 欧美极品久久 | 日日夜夜中文字幕 | 国产v在线 | 国产无遮挡又黄又爽在线观看 | 国产精品欧美一区二区三区不卡 | 97在线观视频免费观看 | 中文字幕中文字幕在线一区 | 91成人在线看| 又黄又刺激的视频 | 国产精品麻豆果冻传媒在线播放 | 亚洲成av人片一区二区梦乃 | 最新中文字幕在线播放 | 亚洲视频免费在线观看 | 伊人色综合网 | 西西444www大胆无视频 | 黄p在线播放 | 一本之道乱码区 | 国产成人av| 日本一区二区三区视频在线播放 | 在线观看国产一区二区 | 天天射天天干天天插 | 国产视频亚洲精品 | 国产精品美女www爽爽爽视频 | 毛片激情永久免费 | 亚洲精品视频二区 | 免费国产ww | 国产精品自拍在线 | 精品国产乱码一区二区三区在线 | 国产高清成人av | 波多野结衣理论片 | 免费看污的网站 | 97涩涩视频 | 午夜精品久久久久久久99热影院 | 中文字幕在线观看免费高清完整版 | 午夜在线免费观看 | 日韩电影在线观看中文字幕 | 国产黄色大片 | 九九欧美 | 在线观看视频国产 | 涩涩爱夜夜爱 | 免费在线观看污网站 | 在线视频 影院 | 午夜精品一区二区三区在线播放 | 97超碰国产在线 | 美女黄网站视频免费 | 国产成人一区二区三区在线观看 | 美女视频永久黄网站免费观看国产 | 国产成人专区 | 美女网站色在线观看 | 久久99精品久久久久久三级 | 久日视频 | 麻豆国产精品一区二区三区 | 一级黄色大片 | 国产亚洲成人网 | 日韩av一区二区在线 | 久久久免费观看完整版 | 欧美不卡视频在线 | 在线91精品 | a亚洲视频 | 日韩专区中文字幕 | 欧美黄色免费 | 九九久久国产精品 | 日韩偷拍精品 | 91久久国产自产拍夜夜嗨 | 国产1区2区 | 激情综合国产 | 玖玖视频免费在线 | 日本一区二区免费在线观看 | 久热色超碰 | 色悠悠久久综合 | 久久精品一区 | 国产在线观看地址 | 高清久久久久久 | 国产破处视频在线播放 | 狠狠干夜夜操天天爽 | www.av免费观看 | 日韩精品视频网站 | 91色蜜桃| 中文字幕免费在线 | 91精品1区 | 激情综合亚洲精品 | 一区二区不卡视频在线观看 | 国产精品入口麻豆 | 香蕉视频在线视频 | 少妇自拍av | 日韩三级视频在线观看 | 超碰在线公开免费 | 色丁香婷婷 | av午夜电影 | 欧美日韩不卡在线视频 | 伊人久久av | 51久久夜色精品国产麻豆 | 亚洲成人黄色网址 | 天天干夜夜爽 | 麻豆国产精品一区二区三区 | 色九九影院 | 久久久免费观看完整版 | 伊人狠狠色丁香婷婷综合 | 国产日韩欧美在线观看视频 | 亚洲婷婷在线视频 | av中文资源在线 | 久久99视频精品 | 波多野结衣视频一区二区 | 中文字幕在线观看第一页 | 人人超在线公开视频 | 欧美激情视频一二区 | 久九视频 | 深夜福利视频在线观看 | 日韩试看 | 人人玩人人添人人 | 亚洲精品乱码久久久久久按摩 | 久黄色 | 丁香五婷 | 超碰免费在线公开 | 永久免费在线 | 国产五十路毛片 | 亚洲精品午夜一区人人爽 | av免费网页 | 国产一区二区精品在线 | 在线观看成人 | 久久久久国产精品厨房 | 国产一二三区在线观看 | 国产手机av | 亚洲国产精品一区二区久久hs | 在线影院 国内精品 | 91人人澡 | 99久久er热在这里只有精品15 | 欧美日韩网站 | 久久久久久视频 | 日本中文一级片 | 国产精品中文字幕在线观看 | 久久国产乱 | 国产精品成人久久久久久久 | 91精品1区| 欧美成人性战久久 | 精品久久一二三区 | 日本aa在线 | 欧美人体xx | 日韩电影中文字幕在线 | 中文字幕文字幕一区二区 | 91日韩在线视频 | 久久九九九九 | 亚洲激情久久 | 中文av免费| 成人91免费视频 | 色五月激情五月 | 欧美国产一区二区 | 成年人免费电影 | 日韩欧美视频在线免费观看 | 日韩久久精品一区二区三区下载 | 手机av在线不卡 | 天天爽夜夜爽人人爽曰av | 欧美一二三四在线 | 久久久久久久久久久久久久免费看 | 青青河边草免费 | 三级视频国产 | 国产精品高潮呻吟久久久久 | 国产人成看黄久久久久久久久 | 在线天堂中文www视软件 | 婷婷六月网 | 91在线亚洲| 亚洲视频免费在线观看 | 亚洲精品美女久久 | 国产一区二区三区在线免费观看 | 久久九九久久精品 | 亚洲欧美日韩精品久久奇米一区 | 91在线入口 | 亚洲精品视频在线观看免费视频 | 精品视频区 | 欧美色黄 | 草久在线观看视频 | 国产在线va | 国产中文在线视频 | av 一区二区三区 | 西西4444www大胆艺术 | 夜色资源网 | 日韩综合在线观看 | 欧美在线aa | 激情欧美在线观看 | 国产一区二区久久精品 | 久久黄色美女 | 超碰97成人 | 狠狠综合久久 | 欧美日韩亚洲在线观看 | 欧美日韩不卡一区二区三区 | 中文字幕黄色 | 中文字幕高清在线 | 毛片精品免费在线观看 | 国产午夜精品理论片在线 | 久久8精品| 国产精品成久久久久 | 国产三级香港三韩国三级 | 亚洲综合日韩在线 | 夜夜躁日日躁狠狠躁 | 99资源网| 91视频 - x99av | 69精品人人人人 | 国产999精品久久久 免费a网站 | 97人人超| 久久久精品国产一区二区电影四季 | 在线网址你懂得 | 日韩欧美一区二区在线观看 | 一级免费av | 国产精品久久久久久一区二区三区 | 欧美精品久久天天躁 | 国产福利中文字幕 | 亚洲欧美国产精品 | 日日夜夜综合 | 91中文字幕网 | 制服丝袜成人在线 | 国产精品都在这里 | 成人精品一区二区三区中文字幕 | 成 人 免费 黄 色 视频 | 91丝袜美腿 | 亚洲资源视频 | 人人插人人爱 | 国产一区二区视频在线播放 | 久久av伊人| 久久午夜鲁丝片 | 九九热精 | 久草网视频 | 99国产免费网址 | 国产黄色在线 | 天天爱天天干天天爽 | 亚洲一级片在线观看 | 91精品一区二区在线观看 | 成人小视频在线观看免费 | 夜夜夜 | 日韩免费在线观看视频 | 国产精品久久久久久久午夜片 | 国产精品久久久久久久久久久久冷 | jizz999| 伊人婷婷网 | 国产做a爱一级久久 | 中文字幕在线免费观看 | 久久久久免费精品 | 欧美日韩国内在线 | 91亚色免费视频 | 999久久a精品合区久久久 | 日韩视频欧美视频 | 在线日本v二区不卡 | 成人精品99| 免费日韩视 | 久久国产精品99久久久久 | 日日激情 | 色婷婷丁香 | 久草在线中文888 | 久久视讯| 成人理论电影 | 免费在线一区二区 | 麻豆视频免费在线播放 | 亚洲精品视频在线免费播放 | 337p日本欧洲亚洲大胆裸体艺术 | 久久a视频 | 美女久久一区 | 在线观看国产高清视频 | 99视频在线观看免费 | 97色在线观看 | 91精品国自产拍天天拍 | 精品国模一区二区三区 | 久久99影院 | 色网站黄 | 综合天堂av久久久久久久 | wwwwwww黄| 伊人久久精品久久亚洲一区 | www.91av在线| 激情视频网页 | 国产一区二区三区免费观看视频 | av网址在线播放 | 黄色avwww | 久久乐九色婷婷综合色狠狠182 | av网站在线观看免费 | 午夜电影 电影 | 久久伊人综合 | 激情五月在线视频 | 五月天色综合 | 特黄特色特刺激视频免费播放 | 在线国产中文字幕 | a资源在线| 久久视频这里只有精品 | 亚洲天堂香蕉 | 久久久久久久久毛片精品 | 又黄又爽又刺激的视频 | 日韩网站在线 | 国产91精品看黄网站 | 天天草天天干天天射 | 成人免费大片黄在线播放 | 久久久久久免费网 | 国产很黄很色的视频 | 黄色中文字幕 | 婷婷久久久久 | 国产最新在线观看 | 亚洲午夜电影网 | 深夜免费网站 | 中文字幕亚洲综合久久五月天色无吗'' | 插插插色综合 | 午夜av在线免费 | 欧美精品做受xxx性少妇 | 91中文在线观看 | 在线看片91| 麻豆精品视频在线观看免费 | 国产精品久久久久久久久搜平片 | 色综合婷婷久久 | 日韩精品aaa | 手机在线欧美 | 国产一级片久久 | 亚洲精品视频久久 | 7777xxxx | 天堂资源在线观看视频 | 九九热只有这里有精品 | 亚洲综合在线发布 | 亚洲精品视频在线观看免费视频 | 激情网站五月天 | 国产成人免费网站 | 亚洲在线视频免费 | 国产精品色婷婷 | 国产精品九九视频 | 国产亚洲精品bv在线观看 | 国色天香第二季 | 一区二区三区视频 | 国产精品久久久久永久免费 | 在线视频99 | 精品一区二区三区四区在线 | 国产精品久久久区三区天天噜 | 亚洲日日夜夜 | 狠狠干婷婷色 | 国产综合小视频 | av电影中文字幕在线观看 | 欧美国产不卡 | 又黄又色又爽 | 国产精品一级在线 | x99av成人免费 | 深爱婷婷久久综合 | 日本成人a | 香蕉视频在线免费 | 96av视频 | 91亚洲精品久久久蜜桃 | 国产成人久久精品亚洲 | 国产在线一区二区三区播放 | 日韩激情一二三区 | 国产日本高清 | 一区二区三区高清不卡 | 欧美性极品xxxx做受 | 伊人五月天综合 | 91久久精品日日躁夜夜躁国产 | 天堂av免费 | 国产精品欧美 | 天无日天天操天天干 | 国产精品午夜久久久久久99热 | 日韩欧在线 | 91高清完整版在线观看 | 天天性天天草 | 精品国产伦一区二区三区 | 精品国产三级 | 日韩视频一区二区在线观看 | 91男人影院 | 狠狠88综合久久久久综合网 | 欧美性黑人| 香蕉国产91 | 国产黄在线| 欧美在线视频日韩 | 亚洲另类视频 | 狠狠综合久久 | 亚洲精品高清一区二区三区四区 | 可以免费看av | 黄色大片国产 | 日韩二级毛片 | 欧美成人xxx | 免费a v在线| 国产精品美女在线观看 | 久久久久久久久久久久久久电影 | 日韩精品不卡在线观看 | 亚洲黄色免费网站 | 麻豆久久一区二区 | 美腿丝袜一区二区三区 | 国产亚洲欧洲 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 91黄色影视 | www..com毛片 | 久久久久久久久久久网 | 怡红院av久久久久久久 | 夜夜澡人模人人添人人看 | 五月婷婷丁香 | 国产中文字幕在线观看 | 色的网站在线观看 | 亚洲国产69| 久久精品久久精品久久 | 91激情视频在线观看 | 婷婷色网视频在线播放 | 日本久久久久久久久久 | 国产最新网站 | 999久久久免费视频 午夜国产在线观看 | 中文字幕成人在线观看 | 亚洲综合在线一区二区三区 | 去看片| 欧美极品少妇xbxb性爽爽视频 | 国产亚洲精品电影 | 日韩综合精品 | 91网站在线视频 | 亚州精品国产 | 久久久视频在线 | 国产精品久久久久久久av电影 | 91亚洲综合 | 欧美日韩三级在线观看 | 中文字幕在线播放一区 | 成人在线视频论坛 | 亚州欧美视频 | www.夜色.com| 九九电影在线 | 国产视频一二三 | 久久涩涩网站 | 狠狠88综合久久久久综合网 | 国产特级毛片aaaaaa毛片 | www.夜夜爱 | 菠萝菠萝在线精品视频 | www色,com| 国产又粗又猛又色又黄网站 | 日本精品视频一区 | 国产精品久久久久久久久软件 | 亚洲综合最新在线 | 黄色毛片在线 | 国产精品白虎 | 天天操天天干天天干 | 国产一区欧美一区 | 在线观看日本高清mv视频 | av中文字幕在线免费观看 | 午夜久久视频 | 在线小视频 | www麻豆视频 | 四虎在线观看 | 亚洲午夜大片 | 久草在线视频精品 | 天天爽夜夜爽人人爽一区二区 | 亚洲三级国产 | 日韩欧三级 | 国产又粗又长又硬免费视频 | 亚洲欧洲日韩在线观看 | 国产精品成人av久久 | 国产久草在线观看 | 国产不卡免费视频 | 日韩簧片在线观看 | 九九影视理伦片 | 91中文字幕网 | 国产免费人人看 | 国产在线不卡精品 | 在线免费观看欧美日韩 | 精品久久久久免费极品大片 | 久久99精品国产麻豆婷婷 | 免费在线观看成年人视频 | 我爱av激情网| 91超在线| 久久伦理视频 | 成人黄色大片网站 | 国产一级片免费视频 | 超级碰碰碰碰 | 韩国在线一区二区 | 97超碰人人澡人人 | 在线成人小视频 | 麻豆精品视频在线 | 天天干,夜夜操 | 热久久精品在线 | 91精品视频免费观看 | 豆豆色资源网xfplay | 高清av中文在线字幕观看1 | 亚洲天天干 | 久久综合精品国产一区二区三区 | 久精品在线观看 | 成年人视频在线 | 免费97视频 | 2021国产在线视频 | 免费h漫在线观看 | 最新中文字幕在线资源 | 日本mv大片欧洲mv大片 | 一区二区三区四区精品 | 视频在线日韩 | 日本中文字幕免费观看 | 久草在线视频新 | 久久中文精品视频 | 亚洲三级在线播放 | 久久国产精品一区二区 | 夜色.com | 中文字幕专区高清在线观看 | 色播99 | 欧美色综合天天久久综合精品 | 免费a v在线 | 99久久综合国产精品二区 | 成人黄色在线视频 | 最新日韩视频在线观看 | 在线日韩av | 片黄色毛片黄色毛片 | 视频国产 | 一区二区av | av电影中文字幕在线观看 | 人人澡人人模 | 91热爆在线观看 | 岛国av在线免费 | 国产免费视频一区二区裸体 | 91在线精品播放 | 美女网站视频免费黄 | 午夜私人影院久久久久 | 色婷婷午夜 | 91日本在线播放 | 国产看片 色 | 国产视频二 | 久久精品123 | 亚洲国产中文字幕在线 | 欧美日韩国产二区三区 | 性日韩欧美在线视频 | 91精品视屏 | 黄色在线网站噜噜噜 | 久久成人国产精品一区二区 | 99精品国产成人一区二区 | 久久久久久高清 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 日日干夜夜草 | 九九视频一区 | 久久激情五月丁香伊人 | 国产小视频你懂的 | 波多野结衣视频在线 | 日本色小说视频 | 久久人人爽人人片 | 日韩激情在线视频 | 日韩视频一区二区在线 | 免费在线观看污网站 | 亚洲精品在线免费播放 | 六月丁香激情网 | 最近中文字幕在线播放 | 久久综合色播五月 | 久久综合免费视频 | 国产亚洲精品美女久久 | 日韩在线免费高清视频 | 欧美一级片免费 | 在线看岛国av | 麻豆国产视频下载 | 福利视频第一页 | 在线天堂视频 | 伊人电影在线观看 | 日本精a在线观看 | www.xxx.性狂虐 | 国产123区在线观看 国产精品麻豆91 | 久久精品欧美日韩精品 | 欧美一区在线观看视频 | 久久99免费 | 成人h电影 | 成人av电影免费观看 | 日韩欧美视频免费在线观看 | 欧美成人一区二区 | 婷婷四房综合激情五月 | 国产精品国产三级国产aⅴ9色 | 在线成人高清电影 | 97人人澡人人爽人人模亚洲 | 激情av网 | 天堂av网址 | 中国一级片在线 | 精品久久一区 | 国产a级片免费观看 | 国产一级高清视频 | 日韩小视频 | 日韩精品一区二区三区外面 | 日韩一区视频在线 | 国产精品久久久久三级 | 粉嫩aⅴ一区二区三区 | 草久热 | 在线看的av网站 | 四虎影视8848dvd | 天天翘av | 日韩女同av | 久久精品一区二区三区国产主播 | 日日夜夜网 | 精品99在线观看 | 亚洲成人av片 | 亚洲高清在线观看视频 | 综合色影院 | 日韩国产在线观看 | 精品久久九九 | 久久精品亚洲一区二区三区观看模式 | 四虎在线免费 | 日韩精品在线观看av | 亚洲高清在线 | 99亚洲视频 | 亚洲另类久久 | 2022久久国产露脸精品国产 | 日日夜夜婷婷 | 丁香视频全集免费观看 | 日本黄色a级大片 | 成人蜜桃 | 91精品免费在线观看 | 2020天天干天天操 | 国产精品99久久久久久小说 | 久久66热这里只有精品 | h视频日本 | 麻豆精品视频在线观看免费 | 五月激情久久久 | 在线观看日韩视频 | 精品国自产在线观看 | 久久任你操 | 国产大片黄色 | 久热av| 视频在线观看日韩 | 国产高清免费视频 | 日韩欧美在线视频一区二区三区 | 在线视频一区观看 | 91精品成人| 国产精品一区二区免费在线观看 | 日韩视频在线不卡 | 久久99在线视频 | 亚洲 欧美 精品 | 99久久超碰中文字幕伊人 | 天天爱天天操天天射 | 亚洲精品资源在线 | 日韩69av | 999久久久久久久久久久 | 国产精品专区在线观看 | 色国产在线 | 草久在线观看 | 精品久久在线 | 精品夜夜嗨av一区二区三区 | www99久久 | 久草热久草视频 | 丁香花中文在线免费观看 | 中文字幕在线免费播放 | 亚洲国产日韩av | 国产精品久久久久国产精品日日 | 日韩va在线观看 | 成人9ⅰ免费影视网站 | 国内一区二区视频 | 激情电影在线观看 | 美女精品在线观看 | 亚洲精品66| 国产日韩精品久久 | 成+人+色综合 | 在线免费观看黄网站 | 国产91全国探花系列在线播放 | 国产成人精品一区二区三区福利 | 久产久精国产品 | 国产精品av在线免费观看 | 高潮久久久久久 | 日韩三级.com | 中文字幕久久网 | 亚洲综合最新在线 | zzijzzij亚洲日本少妇熟睡 | 亚洲一区二区精品 | 久草在线视频新 | 黄色av电影在线观看 | 色插综合 | 欧美日韩中文在线视频 | 手机在线日韩视频 | 日本久久免费视频 | 日日干夜夜爱 | bbbbb女女女女女bbbbb国产 | 亚洲色图美腿丝袜 | 六月丁香婷婷网 | 成人毛片一区 | 激情 一区二区 | 亚欧洲精品视频在线观看 | 综合色综合色 | 成人福利在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 正在播放国产91 | 欧美日韩国产成人 | 精品一区二区免费视频 | 国产精品一区二区三区视频免费 | 欧美综合在线视频 | 亚洲美女视频网 | 成年人在线免费看视频 | 黄色免费网站 | 天天操夜夜做 | 欧美性视频网站 | 久久图 | 婷婷丁香导航 | 四虎在线免费观看视频 | 99高清视频有精品视频 | 久av在线 | 欧美日韩裸体免费视频 | www色网站| 欧美国产日韩在线观看 | 色橹橹欧美在线观看视频高清 | av导航福利 | 正在播放日韩 | 在线观看国产中文字幕 | 免费在线播放av电影 | 91亚洲在线 | 成人在线免费av | 国产爽妇网 | 九九热视频在线 |