六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 31|回复: 0

C#基础系列:开发自己的窗体设计器(在容器上拖动鼠标增加控件)

[复制链接]

升级  32.45%

533

主题

533

主题

533

主题

探花

Rank: 6Rank: 6

积分
1649
 楼主| 发表于 2013-1-26 12:39:51 | 显示全部楼层 |阅读模式
本文我们实现一个简单的通过拖动鼠标来增加控件的方法。
在我们使用vs2005来开发WinForm应用程序的时候,我们通过选择左边“工具箱”中的某个控件,然后在我们自己的窗体上通过拖动鼠标,一个我们需要的控件就出现了,觉得很爽!其实vs2005中已经有这方面的组件,我们通过简单的代码就可以直接使用,这个你可以用“窗体设计器”Google一下,已经有人做了这方面的介绍。
所以我要说的是,难道除了使用vs2005中提供的这个标准组件,就不能自己弄出一个来?即使不够强大,但是最终都是自己折腾出来的,所以也会很爽。下面我就这个功能点做一个介绍,实现效果图如下:


<span style="">实现关键点:
1、动态加载控件:
在vs2005中,在某个容器控件上增加新的子控件相当的简单,语法如下,如,增加一个TextBox:
Control.Controls.Add(new TextBox());
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

2、选择要添加的控件:
通过一个全局的单件类来实现。


3、捕获窗体(或者容器控件,比如Panel,GroupBox等)上鼠标的移动区域,并绘制选择框,如上图中黑色的框。


对于1,是很容易实现的,所以不是我们讨论的重点,我主要讨论2和3点。


第2点:选择需要添加的控件,为了尽量的使Winform中的代码简洁,以及和其它的部分解耦,我们尽量不要考虑在WinForm中使用全局变量或者与其它模块通信的接口。所以我们使用一个单件类SettingService来作为Winform和其它部分通信的中介。
<span style=""><div class="highlighter">

  • publicclassSettingService
  • {
  • privatestaticSettingService_Instance;
  • privateSystem.Windows.Forms.Control_SelectedToolBoxControl;

  • ///<summary>
  • ///在Form中,选择了某个要添加的控件后,这里保存这个控件的一个新实例
  • ///</summary>
  • publicSystem.Windows.Forms.ControlSelectedToolBoxControl
  • {
  • get{returnthis._SelectedToolBoxControl;}
  • set{this._SelectedToolBoxControl=value;}
  • }

  • privateSettingService()
  • {}

  • ///<summary>
  • ///这里使用单件
  • ///</summary>
  • publicstaticSettingServiceInstance
  • {
  • get
  • {
  • if(_Instance==null)
  • {
  • _Instance=newSettingService();
  • }

  • return_Instance;
  • }
  • }
  • }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表