CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

关于 form 的问题!

楼主JAMES001(浪子)2004-05-01 22:15:57 在 VB / 基础类 提问

本人是vb初学者,现在有个问题:  
   
          编译后可执行的窗口,如何禁止用户改变窗口大小。(或者如何让控件跟着窗口大小而改变)  
       
          因为改变窗体后,里面的控件无法跟着改变。  
          现在有急用,忘哪位兄弟帮个忙!!  
        谢谢先! 问题点数:50、回复次数:9Top

1 楼yinweihong()回复于 2004-05-01 22:29:35 得分 4

禁止:me.BorderStyle=3Top

2 楼easydone(无坚不摧)回复于 2004-05-01 22:36:49 得分 4

禁止:在form   resize时间中控制:  
          me.Width=me.Width  
          me.Height=me.Height    
   
   
   
  Top

3 楼easydone(无坚不摧)回复于 2004-05-01 22:41:02 得分 20

方法(一)(不好)  
  类模块文件:  
  ----------------------------------------------------------------------  
  Option   Explicit  
  '****************************************************************  
  '*这是一个自动调整窗口内控间的大小的类模块:  
  '*1.   建立一个新的类模块,加入下列代码,并给类模块起名(例:autosize)  
  '*2.   加入一个窗口并且加入:Private   el   as   new   autosize  
  '*3.   在   Form_Load   事件中加入   el.init   me  
  '*4.   在   Form_Resize   事件中加入   el.formresize   me  
  '****************************************************************  
  Private   nFormHeight             As   Integer  
  Private   nFormWidth               As   Integer  
  Private   nNumOfControls       As   Integer  
  Private   nTop()                       As   Integer  
  Private   nLeft()                     As   Integer  
  Private   nHeight()                 As   Integer  
  Private   nWidth()                   As   Integer  
  Private   nFontSize()             As   Integer  
  Private   nRightMargin()       As   Integer  
  Private   bFirstTime               As   Boolean  
   
   
  Sub   Init(frm   As   Form,   Optional   nWindState   As   Variant)  
        Dim   I                     As   Integer  
        Dim   bWinMax         As   Boolean  
        bWinMax   =   Not   IsMissing(nWindState)  
        nFormHeight   =   frm.Height  
        nFormWidth   =   frm.Width  
        nNumOfControls   =   frm.Controls.Count   -   1  
        bFirstTime   =   True  
        ReDim   nTop(nNumOfControls)  
        ReDim   nLeft(nNumOfControls)  
        ReDim   nHeight(nNumOfControls)  
        ReDim   nWidth(nNumOfControls)  
        ReDim   nFontSize(nNumOfControls)  
        ReDim   nRightMargin(nNumOfControls)  
        On   Error   Resume   Next  
        For   I   =   0   To   nNumOfControls  
              If   TypeOf   frm.Controls(I)   Is   Line   Then  
                    nTop(I)   =   frm.Controls(I).Y1  
                    nLeft(I)   =   frm.Controls(I).X1  
                    nHeight(I)   =   frm.Controls(I).Y2  
                    nWidth(I)   =   frm.Controls(I).X2  
              Else  
                    nTop(I)   =   frm.Controls(I).Top  
                    nLeft(I)   =   frm.Controls(I).Left  
                    nHeight(I)   =   frm.Controls(I).Height  
                    nWidth(I)   =   frm.Controls(I).Width  
                    nFontSize(I)   =   frm.FontSize  
                    nRightMargin(I)   =   frm.Controls(I).RightMargin  
              End   If  
        Next  
        If   bWinMax   Or   frm.WindowState   =   2   Then  
                    frm.Height   =   Screen.Height  
                    frm.Width   =   Screen.Width  
        Else  
                    frm.Height   =   frm.Height   *   Screen.Height   /   7290  
                    frm.Width   =   frm.Width   *   Screen.Width   /   9690  
        End   If  
        bFirstTime   =   True  
  End   Sub  
   
  Sub   FormResize(frm   As   Form)  
        Dim   I                           As   Integer  
        Dim   nCaptionSize     As   Integer  
        Dim   dRatioX               As   Double  
        Dim   dRatioY               As   Double  
        Dim   nSaveRedraw       As   Long  
        On   Error   Resume   Next  
        nSaveRedraw   =   frm.AutoRedraw  
        frm.AutoRedraw   =   True  
        If   bFirstTime   Then  
              bFirstTime   =   False  
              Exit   Sub  
        End   If  
        If   frm.Height   <   nFormHeight   /   2   Then  
            frm.Height   =   nFormHeight   /   2  
        End   If  
        If   frm.Width   <   nFormWidth   /   2   Then  
            frm.Width   =   nFormWidth   /   2  
        End   If  
         
      nCaptionSize   =   400  
        dRatioY   =   1#   *   (nFormHeight   -   nCaptionSize)   _  
          /   (frm.Height   -   nCaptionSize)  
        dRatioX   =   1#   *   nFormWidth   /   frm.Width  
        On   Error   Resume   Next  
        For   I   =   0   To   nNumOfControls  
              If   TypeOf   frm.Controls(I)   Is   Line   Then  
                    frm.Controls(I).Y1   =   Int(nTop(I)   /   dRatioY)  
                    frm.Controls(I).X1   =   Int(nLeft(I)   /   dRatioX)  
                    frm.Controls(I).Y2   =   Int(nHeight(I)   /   dRatioY)  
                    frm.Controls(I).X2   =   Int(nWidth(I)   /   dRatioX)  
              Else  
                    frm.Controls(I).Top   =   Int(nTop(I)   /   dRatioY)  
                    frm.Controls(I).Left   =   Int(nLeft(I)   /   dRatioX)  
                    frm.Controls(I).Height   =   Int(nHeight(I)   /   dRatioY)  
                    frm.Controls(I).Width   =   Int(nWidth(I)   /   dRatioX)  
                    frm.Controls(I).FontSize   =   Int(nFontSize(I)   /   _  
                  dRatioX)   +   Int(nFontSize(I)   /   dRatioX)   Mod   2  
                    frm.Controls(I).RightMargin   =   Int(nRightMargin(I)   /   dRatioY)  
              End   If  
        Next  
        frm.AutoRedraw   =   nSaveRedraw  
  End   Sub  
   
   
  ----------------------------------------------------------------------  
     
  方法(二):(推荐)  
  Private   FormOldWidth   As   Long   '保存窗体的原始宽度  
  Private   FormOldHeight   As   Long   '保存窗体的原始高度  
   
   
  '在调用ResizeForm前先调用本函数(Form_Load中调用)  
  Public   Sub   ResizeInit(FormName   As   Form)  
   
  Dim   Obj   As   Control  
          FormOldWidth   =   FormName.ScaleWidth  
          FormOldHeight   =   FormName.ScaleHeight  
          On   Error   Resume   Next  
           
           
          For   Each   Obj   In   FormName  
                  Obj.Tag   =   Obj.Left   &   "   "   &   Obj.Top   &   "   "   &   Obj.Width   &   "   "   &   Obj.Height   &   "   "  
          Next   Obj  
           
          On   Error   GoTo   0  
   
  End   Sub  
   
  '按比例改变表单内各元件的大小,   在调用ReSizeForm前先调用ReSizeInit函数  
   
  Public   Sub   ResizeForm(FormName   As   Form)  
  Dim   Pos(4)   As   Double  
  Dim   i   As   Long,   TempPos   As   Long,   StartPos   As   Long  
  Dim   Obj   As   Control  
  Dim   ScaleX   As   Double,   ScaleY   As   Double  
   
   
          ScaleX   =   FormName.ScaleWidth   /   FormOldWidth   '保存窗体宽度缩放比例  
          ScaleY   =   FormName.ScaleHeight   /   FormOldHeight   '保存窗体高度缩放比例  
           
          On   Error   Resume   Next  
           
          For   Each   Obj   In   FormName  
                  StartPos   =   1  
                   
                  For   i   =   0   To   4   '读取控件的原始位置与大小  
                          TempPos   =   InStr(StartPos,   Obj.Tag,   "   ",   vbTextCompare)  
                          If   TempPos   >   0   Then  
                                  Pos(i)   =   Mid(Obj.Tag,   StartPos,   TempPos   -   StartPos)  
                                  StartPos   =   TempPos   +   1  
                          Else  
                                  Pos(i)   =   0  
                          End   If  
                           
                          '根据控件的原始位置及窗体改变大小   的比例对控件重新定位与改变大小  
                          Obj.Left   =   Pos(0)   *   ScaleX  
                          Obj.Top   =   Pos(1)   *   ScaleY  
                          Obj.Width   =   Pos(2)   *   ScaleX  
                          Obj.Height   =   Pos(3)   *   ScaleY  
                  Next   i  
           
          Next   Obj  
           
          On   Error   GoTo   0  
   
  End   Sub  
   
  --------------------------------  
  可以试试上面2种方法,但并不是都有效的!Top

4 楼BitBlt(Raster Operater)回复于 2004-05-01 23:10:27 得分 2

是啊,有些控件,如combo,高度是固定的,显示出来可能要乱套。Top

5 楼luoxiaoxiang(翔翔)回复于 2004-05-02 02:16:57 得分 5

固定大小直接在属性里设置就行了。  
  调整大小的话用代码编写控件的位置,值根据窗体的大小按比例设置。Top

6 楼CruelYoung123(向牛人们学习@HOHO~~~)回复于 2004-05-02 10:25:59 得分 4

禁止:  
   
  Borderstyle=1;  
  同时:maxbutton=FALSE  
   
  minbutton=true     这样的窗口形式很常见的一种形式,  
  你试一下就知道了Top

7 楼CruelYoung123(向牛人们学习@HOHO~~~)回复于 2004-05-02 10:31:46 得分 5

同时变动的话:  
  就是FORM的RESIZE事件Top

8 楼shortppsy(小河)回复于 2004-05-02 10:33:15 得分 3

Borderstyle=1  
  maxbutton=0Top

9 楼s1ihome(My hometown is a beautiful village)回复于 2004-05-02 10:35:24 得分 3

禁止改变大小的话在属性设置里面改变一下就可以,  
  Borderstyle=1;         'fixed   single  
  同时:maxbutton=FALSETop

相关问题

  • Form
  • form
  • windows form
  • form能否嵌套form
  • form中套form如何submit
  • 关于post form
  • 关于create form
  • 刷新 FORM
  • form_unload 问题
  • How to check a form?

关键词

  • 控件
  • 模块
  • me
  • 大小
  • 窗体
  • maxbutton
  • 改变
  • startpos
  • 禁止
  • borderstyle

得分解答快速导航

  • 帖主:JAMES001
  • yinweihong
  • easydone
  • easydone
  • BitBlt
  • luoxiaoxiang
  • CruelYoung123
  • CruelYoung123
  • shortppsy
  • s1ihome

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo