创建一个基于Custom的类resizeable,并新建属性和方法程序,其说明如下:
  a) 新建属性:
 posiTyperList   可调整位置的控件类型列表
sizeTypeList    可调整大小的控件类型列表
acontrolStats[1,4]存放Form初始状态下所有控件的大小
initformHeight   Form的初始高度
initformWidth    Form的初始宽度
initResize     初次调整否
  b) 新建方法程序:
  procontrols   处理Form中所有控件位置和大小
  savecontrols  保存Form中所有控件的大小和比例
  setposition   重新设置控件位置
  setsize     重新设置控件大小
  具体实现的程序代码清单如下:
Procedure procontrols  &&处理Form中所有控件位置和大小
 IF This.InitResize    &&是初次调整
  This.InitResize=.F.  &&设为非初次调整
 ENDIF
 Thisform.LockScreen=.T.   &&禁止屏幕刷新
 nPos=0    &&控件计数器
 FOR m.i=1 TO Thisform.ControlCount   &&遍历所有控件
  oControl=Thisform.Controls[m.i]
   nPos=nPos+1
   If This.InitResize    &&初次调整
    This.Savecontrols(oControl)    &&保存原Form中所有控件的大小比例
   ENDIF
   IF oControl.Class$This.posiTypeList   &&控件是否为用户指定类型
    This.SetPosition(oControl,nPos)   &&设置控件位置
   ENDIF
   IF oControl.Class$This.SizeTypeList  &&控件是否为用户指定类型
    This.SetSize(oControl,nPos)   &&设置控件大小
   ENDIF
 ENDFOR
 Thisform.LockScreen=.F.    &&允许屏幕刷新
Procedure savecontrols   &&保存Form初始状态下所有控件的大小比例
Para oControl
 nLen=ALEN(This.aControlStats,1)
 This.aControlStats[nLen,1]=oControl.Height/This.InitFormHeight
 This.aControlStats[nLen,2]=oControl.Width/This.InitFormWidth
 This.aControlStats[nLen,3]=oControl.Top/This.InitlFormHeight
 This.aControlStats[nLen,4]=oControl.Left/This.InitFormWidth
 DIMENSION This.aControlStats[nLen+1,4]
Procedure setposition    &&重新设置控件位置
 Para oControl,nPos
  oControl.Top=Thisform.Height*This.aControlStats[nPos,3]
  oControl.Left=Thisform.Width*This.aControlStats[nPos,4]
Procedure setsize   &&重新设置控件大小
 Para oControl,nPos
  oControl.Width=Thisform.Width*This.aControlStats[nPos,2]
  IF !oControl.Baseclass $ "Textbox Spinner"
   oControl.Height=Thisform.Height * This.aControlStats[nPos,1]
  ENDIF
Procedure Init   &&初始化
 This.InitFormHeight=Thisform.Height
 This.InitFormWidth=Thisform.Width
 InitResize=.T.

2 实际应用

  将resizeable类应用到Form中,需完成以下工作:
  (1) Form中添加resizeable类对象,且向其Resize Event添加代码:
This.Resizable1.procontrols
  (2) Form中resizeable1对象的posiTypeList和sizeTypeList分别输入属性值。posiTypeList指定了允许调整位置的控件类型,例如:
Commandbutton Combobox Checkbox Listbox Grid Textbox Label Shape Editbox Spinner
  同样,sizeTypeList由用户指定允许调整大小的控件类型。posiTypeList值和sizeTypeList值可以不一致。
  在Form运行状态下,当点击Form的最大/恢复按钮或拖动Form边框时,Form中所有控件会随窗口的变化自动改变大小。
  与调整尺寸有关的Form属性有: ZoomBox 、Minheight、 MinWidth、MaxHeight 、MaxLeft 、MaxTop 、MaxWidth。若允许用户调整Form 尺寸必须设置 Form.ZoomBox=.F.。
  用户可根据Form的页面布局,选定Form的高度和宽度的最值。
  所设计的resizable类有以下特点:通用性强,适用于任何Form,程序不需作变动;封装性好,易于使用和维护;留有接口,允许用户自由选择调整位置和大小的控件类型。

为Form中的控件增加自适应功能 转的更多相关文章

  1. 给Webkit内核的浏览器控件增加互交功能

    转载请说明出处,谢谢~~ 昨天封装了基于webkit的wke浏览器内核,做成了duilib的浏览器控件,实现了浏览功能,但是单单的浏览功能还不满足需求,在我的仿酷狗项目中乐库的功能需要与浏览器互交. ...

  2. 委托 在其他类中修改form中的控件属性

    通常情况下,我们需要在其他业务类中将提示信息时时显示到主界面上,可以通过以下方式 Form1.cs using System; ; i < ; i++) {                 cb ...

  3. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】

    1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...

  4. MFC的停靠窗口中插入对话框,在对话框中添加控件并做控件自适应

    单文档程序添加了停靠窗口后,可能会在停靠窗口中添加一些控件.在这里我的做法是在对话框上添加控件并布局,然后将这个对话框插入到停靠窗口中. 步骤 1.插入对话框,在对话框中放入控件(我的为树形控件),并 ...

  5. C# Winform 界面中各控件随着窗口大小变化

    在做一项工程中,由于不确定目标平台的分辨率,而正常使用要求铺满整个屏幕,所以界面中的各个控件必须能够适应窗口的变化. 首先想到的就是控件的百分比布局,但是再尝试写了几个控件的Location和Size ...

  6. 转:C# WinForm窗体及其控件的自适应

    一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率>  ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...

  7. [转载]ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值

    原文地址:http://www.cnblogs.com/yxyht/archive/2013/03/02/2939883.html ASP.NET中TextBox控件设置ReadOnly=" ...

  8. 041. asp.net中内容页访问母版页中的控件

    母版页运行机制: 用户通过输入内容也的URL来请求某个页面, 获取该页面后, 读取@Page指令, 如果该指令引用了一个母版页, 则也读取该母版页, 如果也是第一次请求这两个页面, 则母版页和被请求的 ...

  9. asp.net中Ajax控件的用途(二)

    1.个人觉得对于新手最为实用的PopupControlExtender,弹出层载体,在实例中可以弹出登录框,百度的登陆页面基本都用的这种形式,可以把浮动的panel宽高都设置为100%,以屏蔽底层操作 ...

随机推荐

  1. Redis 五:配置主从复制功能

    redis的主从复制事实上是非常简单的一件事情,甚至比mysql的配置还简单,因为基本不需要在主服务器上做任何操作 我们在同一台服务器上开不同的端口进行测试操作(安装部分就不说啦,前面的文章有::) ...

  2. hdu 2120 Ice_cream's world I

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2120 Ice_cream's world I Description ice_cream's worl ...

  3. hdu 1305 Immediate Decodability

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1305 字典树裸题,如下: #include<algorithm> #include< ...

  4. Android 上下文菜单实现

    1.覆盖Activity的onCreateContenxtMenu()方法,调用Menu的add方法添加菜单项(MenuItem). 2.覆盖Activity的onContextItemSelecte ...

  5. ios中三种多线程的技术对比

    1.NSThread 使用较少 在NSThread调用的方法中,同样要使用autoreleasepool进行内存管理,否则容易出现内存泄露. 使用流程:创建线程-->启动线程 2.NSOpera ...

  6. ubuntu server获取并自动设置最快镜像的方法

    一,安装方法1 add-apt-repository ppa:ossug-hychen/getfastmirrorapt-get install getfastmirror 如果添加了临时源,这样移除 ...

  7. Go原子计数

    通过原子计数可以在多线程情况下,对同一个数值进行加减操作,一般用于状态同步. 先看代码: package main import "fmt" import "time&q ...

  8. 如何用nodejs写入mysql 的blob格式的数据

    So, if the array length equals 4, then the size of blob data in mysql DB must be 4 bytes. And it wor ...

  9. MVC4.0 解决Controllers与Areas中控制器不能同名问题

    在使用MVC4.0的时候,难免会遇到在根目录下的Controllers中添加的控制器名称可能会跟在Areas中的某个区域下的控制器名称一样.这个时候访问Areas下面的Controller/Actio ...

  10. 【转载】FPGA静态时序分析——IO口时序

    转自:http://www.cnblogs.com/linjie-swust/archive/2012/03/01/FPGA.html 1.1  概述 在高速系统中FPGA时序约束不止包括内部时钟约束 ...