十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇內(nèi)容主要講解“C#怎么用鼠標(biāo)畫框創(chuàng)建控件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C#怎么用鼠標(biāo)畫框創(chuàng)建控件”吧!
大姚ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
首先定義Control _Owner,使用是的Control類型是因?yàn)槲覀儾粌H僅需要在Winform上增加控件,也需要在其它容器,比如Panel,GroupBox等上面增加容器,比如Panel,GroupBox等上面增加容器。
然后重新Control上的鼠標(biāo)事件Control_MouseDown,Control_MouseMove,Control_MouseUp,Control_MouseEnter。
直接上源碼
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace SumBLL.DrawControl
{
#region 鼠標(biāo)拖動(dòng)創(chuàng)建控件
///
/// 鼠標(biāo)拖動(dòng)創(chuàng)建事件
///
public class MouseHook
{
Control _Owner;
//要畫的子控件
private Control _childCtrl;
private bool _autosize;
private int _CLickAtX;
private int _ClickAtY;
private int _MoveAtX;
private int _MoveAtY;
private bool _BeginDrag;
private bool _BeginDrawControl;
///
/// 對(duì)外公共類
///
public Control DrawCtrl
{
get
{
return _childCtrl;
}
set
{
_childCtrl = value;
}
}
///
/// 這里Owner使用的是Control類型,是因?yàn)槲覀儾粌H僅需要在Winform上增加控件,
/// 也需要在其它容器,比如Panel,GroupBox等上面增加容器
///
///
public MouseHook(Control Owner, bool autosize = true)
{
this._Owner = Owner;
this._Owner.MouseDown += new MouseEventHandler(this.Control_MouseDown);
this._Owner.MouseMove += new MouseEventHandler(this.Control_MouseMove);
this._Owner.MouseUp += new MouseEventHandler(this.Control_MouseUp);
this._Owner.MouseEnter += new EventHandler(this.Control_MouseEnter);
this._BeginDrawControl = false;
this._autosize = autosize;
}
#region Control上的鼠標(biāo)事件
void Control_MouseDown(object sender, MouseEventArgs e)
{
//判斷選擇控件,還是選擇畫筆
if (_childCtrl != null)
{
this._CLickAtX = e.X;
this._ClickAtY = e.Y;
this._MoveAtX = e.X;
this._MoveAtY = e.Y;
this._BeginDrag = true;
if (_childCtrl != null)
{
this._BeginDrawControl = true;
}
else
{
this._BeginDrawControl = false;
}
}
}
void Control_MouseMove(object sender, MouseEventArgs e)
{
if(_childCtrl != null)
{
if(this._BeginDrag)
{
//取消上次繪制的選擇框
int iLeft, iTop, iWidth, iHeight;
Pen pen;
Rectangle rect;
pen = new Pen(this._Owner.BackColor);
if(this._BeginDrawControl == true)
{
pen.DashStyle = DashStyle.Solid;
pen.Width = 2;
}
else
{
pen.DashStyle = DashStyle.Dot;
}
iLeft = this._CLickAtX < this._MoveAtX ? this._CLickAtX : this._MoveAtX;
iTop = this._ClickAtY < this._MoveAtY ? this._ClickAtY : this._MoveAtY;
iWidth = Math.Abs(this._MoveAtX - this._CLickAtX);
iHeight = Math.Abs(this._MoveAtY - this._ClickAtY);
rect = new Rectangle(iLeft, iTop, iWidth, iHeight);
this._Owner.CreateGraphics().DrawRectangle(pen, rect);
//重新繪制選擇框
this._MoveAtX = e.X;
this._MoveAtY = e.Y;
pen = new Pen(Color.Black);
if(this._BeginDrawControl == true)
{
pen.DashStyle = DashStyle.Solid;
pen.Width = 2;
}
else
{
pen.DashStyle = DashStyle.Dot;
}
iLeft = this._CLickAtX < this._MoveAtX ? this._CLickAtX : this._MoveAtX;
iTop = this._ClickAtY < this._MoveAtY ? this._ClickAtY : this._MoveAtY;
iWidth = Math.Abs(this._MoveAtX - this._CLickAtX);
iHeight = Math.Abs(this._MoveAtY - this._ClickAtY);
rect = new Rectangle(iLeft, iTop, iWidth, iHeight);
this._Owner.CreateGraphics().DrawRectangle(pen, rect);
}
}
}
void Control_MouseUp(object sender, MouseEventArgs e)
{
this._BeginDrag = false;
this._Owner.SuspendLayout();
if(_childCtrl != null)
{
//取消上次繪制的選擇框
int iLeft, iTop, iWidth, iHeight;
Pen pen;
Rectangle rect;
pen = new Pen(this._Owner.BackColor);
pen.DashStyle = DashStyle.Dot;
iLeft = this._CLickAtX < this._MoveAtX ? this._CLickAtX : this._MoveAtX;
iTop = this._ClickAtY < this._MoveAtY ? this._ClickAtY : this._MoveAtY;
iWidth = Math.Abs(this._MoveAtX - this._CLickAtX);
iHeight = Math.Abs(this._MoveAtY - this._ClickAtY);
rect = new Rectangle(iLeft, iTop, iWidth, iHeight);
this._Owner.CreateGraphics().DrawRectangle(pen, rect);
if(_childCtrl != null)
{
AddControl(_childCtrl, rect);
}
else
{
//這里是拖動(dòng)鼠標(biāo),選擇控件,這里將會(huì)在后續(xù)的介紹中給出
}
}
this._Owner.Refresh();
this._Owner.ResumeLayout();
}
void Control_MouseEnter(object sender, EventArgs e)
{
if(_childCtrl != null)
{
this._Owner.Cursor = Cursors.Cross;
}
else
{
this._Owner.Cursor = Cursors.Default;
}
}
private void AddControl(Control control, Rectangle rect)
{
try
{
control.Location = rect.Location;
if(!_autosize)
control.Size = rect.Size;
//control.Name = GetControlName(control);
//因?yàn)閷?duì)于DataTimePiker控件來說不能設(shè)置.Text為非日期型,所以忽略錯(cuò)誤
try
{
control.Text = GetControlType(control);
}
catch { }
this._Owner.Controls.Add(control);
control.Visible = true;
this._Owner.Cursor = Cursors.Default;
_childCtrl = null;
}
catch(Exception e)
{
this._Owner.Cursor = Cursors.Default;
_childCtrl = null;
}
}
private string GetControlType(Control ctrl)
{
string strType = ctrl.GetType().ToString();
string strControlType;
string[] strArr = strType.Split(".".ToCharArray());
strControlType = strArr[strArr.Length - 1].Trim();
return strControlType;
}
private string GetControlName(Control control)
{
//這里簡(jiǎn)單返回控件名,如果需要,可以通過修改這個(gè)函數(shù)做特殊處理
return control.GetType().Name;
}
#endregion
}
#endregion
}
外部調(diào)用方法
//用于拖動(dòng)控件的函數(shù)類,在窗體初始化時(shí)直接實(shí)例
private MouseHook _MouseHook;
//初始化Panel顯示動(dòng)態(tài)巡更點(diǎn)
this._MouseHook = new MouseHook(pnlRouteDetail);
//創(chuàng)建用戶控件實(shí)例
UCPatRouteDetail ucrd = new UCPatRouteDetail(_nowPatRouteDetail);
ucrd.Name = _nowPatRouteDetail.RouteID + _nowPatRouteDetail.DetailID;
ucrd.MouseDown += MouseDown;
ucrd.MouseMove += MouseMove;
ucrd.MouseUp += MouseUp;
ucrd.Delevent += DelUserControl;
//給畫圖地方賦值新實(shí)例
_MouseHook.DrawCtrl = ucrd;
到此,相信大家對(duì)“C#怎么用鼠標(biāo)畫框創(chuàng)建控件”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!