千家信息网

C#怎么用鼠标画框创建控件

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"C#怎么用鼠标画框创建控件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#怎么用鼠标画框创建控件"吧!首先定义Control _Own
千家信息网最后更新 2026年11月02日C#怎么用鼠标画框创建控件

本篇内容主要讲解"C#怎么用鼠标画框创建控件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#怎么用鼠标画框创建控件"吧!

首先定义Control _Owner,使用是的Control类型是因为我们不仅仅需要在Winform上增加控件,也需要在其它容器,比如Panel,GroupBox等上面增加容器,比如Panel,GroupBox等上面增加容器。

然后重新Control上的鼠标事件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 鼠标拖动创建控件
///


/// 鼠标拖动创建事件
///

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;

///
/// 对外公共类
///

public Control DrawCtrl
{
get
{
return _childCtrl;
}
set
{
_childCtrl = value;
}
}
///
/// 这里Owner使用的是Control类型,是因为我们不仅仅需要在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上的鼠标事件
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
{
//这里是拖动鼠标,选择控件,这里将会在后续的介绍中给出
}

}
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);
//因为对于DataTimePiker控件来说不能设置.Text为非日期型,所以忽略错误
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)
{
//这里简单返回控件名,如果需要,可以通过修改这个函数做特殊处理
return control.GetType().Name;
}
#endregion
}
#endregion
}

外部调用方法

//用于拖动控件的函数类,在窗体初始化时直接实例
private MouseHook _MouseHook;

//初始化Panel显示动态巡更点
this._MouseHook = new MouseHook(pnlRouteDetail);

//创建用户控件实例
UCPatRouteDetail ucrd = new UCPatRouteDetail(_nowPatRouteDetail);
ucrd.Name = _nowPatRouteDetail.RouteID + _nowPatRouteDetail.DetailID;
ucrd.MouseDown += MouseDown;
ucrd.MouseMove += MouseMove;
ucrd.MouseUp += MouseUp;
ucrd.Delevent += DelUserControl;
//给画图地方赋值新实例
_MouseHook.DrawCtrl = ucrd;

到此,相信大家对"C#怎么用鼠标画框创建控件"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

控件 鼠标 选择 容器 画框 C# 事件 实例 不仅仅 内容 函数 方法 类型 学习 实用 更深 特殊 兴趣 动态 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 广东万易互联网科技有限公司惠州分公司 南京欣网互联网络科技有限公司 与互联网科技公司 互联网金融与金融科技 致骋互联网科技 互联网金融科技平台 赫美联合互联网科技 新华互联网科技校企合作 以后互联网后是啥科技 南山科技园互联网公司有哪些 全球顶尖互联网科技公司 深圳市优智互联网科技有限公司 广西互联网科技孵化中心 乌苏新华互联网科技做什么的 洛阳共同富裕互联网科技有限公司 深圳无忧互联网科技 信承诺互联网科技有限公司 北京军民互联网科技公司 互联网科技和医药行业 互联网科技图片 互联网和科技创新 科技与互联网发展 互联网的科技创新 互联网科技小贷 科技互联网公司logo 深圳前海聚择互联网科技有限公司 米聚互联网科技南京有限公司排面 企晟互联网信息科技有限公司 互联网大会出现的黑科技
0