C# 模拟VisualStudio窗体设计器拖放控件
C# 模拟VisualStudio窗体设计器拖放控件
从设计角度来看光画个控件是很简单的事,捕捉Mouse down/move/up 事件记录好坐标在Mouse Up事件触发时画出控件或者图形,其实最重要的时如何设计这个小框架。
我定义几个类仅供参考。

/// <summary>
/// 控件样式基类定义
/// </summary>
public class DrawStyle
{
protected bool _Drawing = false;
protected Control _Container = null;
protected Control _ActivedControl = null;
protected Point _S; //Start Point.
public virtual void BeginDraw(Control container, Point P) { }
public virtual void EndDraw(Control container, Point P) { }
public virtual void OnMove(Control container, Point P) { }
}
// 来源:www.CSFramework.com, C/S结构框架学习网
/// 控件样式基类定义
/// </summary>
public class DrawStyle
{
protected bool _Drawing = false;
protected Control _Container = null;
protected Control _ActivedControl = null;
protected Point _S; //Start Point.
public virtual void BeginDraw(Control container, Point P) { }
public virtual void EndDraw(Control container, Point P) { }
public virtual void OnMove(Control container, Point P) { }
}
// 来源:www.CSFramework.com, C/S结构框架学习网
/// <summary>
/// 拖放TextBox控件
/// </summary>
public class DrawTextBox : DrawStyle
{
private TextBox _CurrentText;
public DrawTextBox() { }
public override void BeginDraw(Control container, Point P)
{
_S = P;
_Drawing = true;
_Container = container;
_CurrentText = new TextBox();
_CurrentText.Multiline = true;
_ActivedControl = _CurrentText;
if (container.Controls.IndexOf(_ActivedControl) < 0)
container.Controls.Add(_ActivedControl);
_ActivedControl.Left = P.X;
_ActivedControl.Top = P.Y;
}
public override void EndDraw(Control container, Point P)
{
//向右下方拖動X,Y為正數,當為負數時為反向拖動,需要更改Top,Left屬性
_ActivedControl.Width = P.X - _S.X;
_ActivedControl.Height = P.Y - _S.Y;
_ActivedControl.Visible = true;
_Drawing = false;
}
public override void OnMove(Control container, Point P)
{
if (_Drawing == false) return;
if (_Container != container) return;
//向右下方拖動X,Y為正數,當為負數時為反向拖動,需要更改Top,Left屬性
_ActivedControl.Width = P.X - _S.X;
_ActivedControl.Height = P.Y - _S.Y;
_ActivedControl.Invalidate();
}
}
// 来源:www.CSFramework.com, C/S结构框架学习网
/// <summary>
/// 自定义IDE设计器,控件容器
/// </summary>
public class MyCanvasDesigner
{
private Control _Designer;
public MyCanvasDesigner(Control control)
{
_Designer = control;
}
public void Clear()
{
_Designer.Controls.Clear();
}
}
// 来源:www.CSFramework.com, C/S结构框架学习网
/// 自定义IDE设计器,控件容器
/// </summary>
public class MyCanvasDesigner
{
private Control _Designer;
public MyCanvasDesigner(Control control)
{
_Designer = control;
}
public void Clear()
{
_Designer.Controls.Clear();
}
}
// 来源:www.CSFramework.com, C/S结构框架学习网
/// <summary>
/// 应用场景/控制器
/// </summary>
public class DrawController
{
private static MyCanvasDesigner _Canvas = null;
private static DrawStyle _CurrentDraw = null;
/// <summary>
/// 当前拖放的控件
/// </summary>
public static DrawStyle CurrentDraw
{
get
{
if (_CurrentDraw == null) _CurrentDraw = new DrawTextBox();
return _CurrentDraw;
}
set { _CurrentDraw = value; }
}
/// <summary>
///当前Designer, 支持多个IDE设计器,控件容器
/// </summary>
public static MyCanvasDesigner CurrentDesigner
{
get { return _Canvas; }
set { _Canvas = value; }
}
}
// 来源:www.CSFramework.com, C/S结构框架学习网

参考文档:
C# OOP编程 模拟做早餐探索同步异步机制-C/S开发框架
K12在线教育平台_pc+手机_视频点播+在线题库+模拟考试+在线考试_源码下载
MySql 时间戳Timestamp字段类型的字段作为主键模拟用户并发操作
软件开发与设计 - MIS-管理信息系统-K12在线教育平台|pc+手机|视频点播+在线题库+模拟考试+在线考试
CSFramework.WebApi开发框架模拟Web用户端登录、调用WebApi接口增删改查数据
CSFramework模拟百度搜索引擎自动语义分析分词算法(C#)
模拟百度搜索渲染HTML页面关键词高亮分组排序算法(C#)
模拟搜索引擎中文自动分词算法精华(CSFramework特别提供C#源码)
C#模拟百度搜索长词自动语义匹配,使用分词算法抽取关键词
C#使用分词算法从文本字符串中抽取关键词模拟百度搜索|CSFramework.COM巨献
C/S系统快速开发平台采用ADO-Direct模式模拟数据提交流程
C/S系统快速开发平台采用WCF模式模拟完整请求的流程
VisualStudio VS2010 统计代码行数
状态机 - State Machine! C#.Net模拟电梯控制系统!
.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
C# OOP编程 模拟做早餐探索同步异步机制-C/S开发框架
K12在线教育平台_pc+手机_视频点播+在线题库+模拟考试+在线考试_源码下载
MySql 时间戳Timestamp字段类型的字段作为主键模拟用户并发操作
软件开发与设计 - MIS-管理信息系统-K12在线教育平台|pc+手机|视频点播+在线题库+模拟考试+在线考试
CSFramework.WebApi开发框架模拟Web用户端登录、调用WebApi接口增删改查数据
CSFramework模拟百度搜索引擎自动语义分析分词算法(C#)
模拟百度搜索渲染HTML页面关键词高亮分组排序算法(C#)
模拟搜索引擎中文自动分词算法精华(CSFramework特别提供C#源码)
C#模拟百度搜索长词自动语义匹配,使用分词算法抽取关键词
C#使用分词算法从文本字符串中抽取关键词模拟百度搜索|CSFramework.COM巨献
C/S系统快速开发平台采用ADO-Direct模式模拟数据提交流程
C/S系统快速开发平台采用WCF模式模拟完整请求的流程
VisualStudio VS2010 统计代码行数
状态机 - State Machine! C#.Net模拟电梯控制系统!
.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
