窗体的resize事件

Snow780311 2003-08-18 04:13:01
当form 的大小改变后,如后编程,使form上的控件布局和form 未改变一样,使空间布局匀称。
...全文
140 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyl910 2003-08-18
  • 打赏
  • 举报
回复
Resize 事件示例
本例在任何调整窗体大小时的时候,都将自动调整一个 TextBox 控件的大小以填充该窗体。要尝试这个例子,可以将代码粘贴到包含 TextBox 的窗体声明部分。 设置 TextBox 控件的 MultiLine 属性为 True,ScrollBars 属性为 3,BorderStyle 属性为 0,然后按F5键并调整窗体大小。

Private Sub Form_Load ()
Text1.Text = "" ' 清除文本。
End Sub

Private Sub Form_Resize ()
Text1.Move 0,0, ScaleWidth, ScaleHeight
End Sub

lihonggen0 2003-08-18
  • 打赏
  • 举报
回复

就是vb6的代码

将上述的代码存为模块


屏幕调用如下:

Private Sub Form_Load()
ResizeInit Form1
End Sub

Private Sub Form_Resize()
ResizeForm Form1
End Sub
Snow780311 2003-08-18
  • 打赏
  • 举报
回复
不行呀,我用的是vb6.0
FormName.ScaleWidth
编译时出错
溢出
请帮忙
lisong770818 2003-08-18
  • 打赏
  • 举报
回复
up
lihonggen0 2003-08-18
  • 打赏
  • 举报
回复
在form_load里调用ResizeInit
在form_Resize里调用ResizeForm
Snow780311 2003-08-18
  • 打赏
  • 举报
回复
能举个例子吗,比如只有一个command1控件
请帮忙请代码
lihonggen0 2003-08-18
  • 打赏
  • 举报
回复
Option Explicit
Private FormOldWidth As Long
'`保存窗体的原始宽度
Private FormOldHeight As Long
'`保存窗体的原始高度

'`在调用ResizeForm前先调用本函数
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.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Next I
Next Obj
On Error GoTo 0
End Sub

射天狼 2003-08-18
  • 打赏
  • 举报
回复
看你窗口上都有什么控件了,所有的控件的位置及大小都需要写程序,并且控件越多,写的代码就越多。都是根据窗口的宽度与高度调整控件的位置
zhenglc 2003-08-18
  • 打赏
  • 举报
回复
form_resize中按比例设计控件布局和大小
说 明: 〖accResize1.0〗

这是针对access97所做的自动调整窗体和控件大小的控件,使你的窗口在缩放的时候各控件位置和大小会自动调整。这样你的程序即可在640*480分辨率下运行,也可在800*600下运行,而且在任何大小情况下,窗体里的控件都会随着窗体的大小而变化,保证你可以看到整个窗体的所有内容。只要改变窗体的大小,包括标签、文本框、下拉框、列表框、选项框、检查框、图片、普通子窗体、数据子窗体等控件都会自动按相应的比例实时改变大小。
写这个控件的初衷主要是以前在开发VB程序时用到resize的控件,觉得比较好用,而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构),而当时我开发的一个项目需要同时适应800*600 和640*480 两种分辨率,所以触发我自己写这方面的程序。经过几次比较大的改动,现在大致可以满足我的需要。一年后,我在网络上找到Ken Getz, Paul Litwin, and Mike Gilbert写的Scale and Resize Your Access Forms演示程序,知道原来在这个世界,还有人与我有同样的想法,他们的功能做得挺棒,只可惜看不到他们的源码。不过知道他们是用API来做的。我比较了两者之间的速度,应该是差不多的。为了让大家了解,我迟点会把他们的演示程序上传。




〖accResize1.0〗说明文件


一、【主要功能】
实现窗口在缩放的时候各控件位置和大小自动调整功能
二、文件列表

resize.mde 控件缩放的核心代码
testresize.mdb 测试缩放效果的例子程序

三、〖accResize1.0〗使用方法

1. 确保你已经安装了access97
2. 将下载的文件用WINRAR解压后放在同一个目录
3. 用ACCESS打开(或双击)testresize.mdb,运行其中的窗体文件即可
4. 如果你想在你的程序中使用这个功能,只要把resize.mde抄到你的程序目录下,然后打开你的程序,在工具菜单中选择[引用],引用resize.mde即可(你需进入代码状态才能看到工具菜单中的引用子菜单),最后在你自己程序的窗体中的resize事件中加入 resize.Form_myResize Me 这句程序即可。

5. 请注意,为了加快窗体缩放的速度,所以程序有个特别注意的地方: 当你在窗体中添加新的控件或改变了位置,需在重新关闭你的程序(即关闭MDB后)再打开才能生效。
实际我试过,即使增加新的控件就自动更新,速度亦差不多


四、错误反馈

1. 如果你发现软件中的错误,欢迎你反馈给作者。


五、【使用许可/LICENSE】

请仔细阅读以下使用许可,如果您不同意以下任何一点,请
立即停止使用此软件。

1.〖accResize1.0〗的作者王宇虹授予您对此版本的最终用户使用
许可权;
2.您不能对软件作任何的软件反向工程,如反汇编,跟踪等;
3.您可以分发此软件,但不能收取任何费用或用于商业目的,
同时,必须保证所分发的软件包含全部文件,并且不作任何
修改;分发的软件应该至少包括我软件所附带的README.txt
4.本软件不包含任何使用保证,不能保证适用或不出故障,由
于此软件是免费提供,因此作者不对您或别的用户使用此
软件所带来的理论上或实际的损失负责;
5.如果您用了此软件就等于您同意以上几点许可;
6.如果你觉的该软件好用,请发一封Email给作者表示感谢,这些支持将会使作者
写出更好软件,谢谢!

六、【软件注册费用】
完全免费!!
本软件所有功能都可以免费使用,完全没有限制。

七、【源码费用】

如果你对此软件的源码感兴趣,你可以向作者免费索取。
你只要发封EMAIL给作者,说明你需要索取这个程序的源码,作者即会把源码EMAIL给你。
电子信箱:wang_yu_hong@163.net
tmtony@21cn.com


你可以到我的主页
http://www.zstmcomputer.com
或 http://tmcomputer.6to23.com

免费获得其它完整的应用软件或一些已公开的源码。



八、【主要技术】
具体请参照程序


系统编写开始时间: 12/03/2001
完成及验收时间: 18/04/2001

九、【感谢】
此软件的诞生得到了同事以及客户的支持和测试,在此表示感谢。
 
这是针对access2000所做的自动调整窗体和控件大小的控件,使你的窗口在缩放的时候各控件位置和大小会自动调整。这样你的程序即可在640*480分辨率下运行,也可在800*600下运行,而且在任何大小情况下,窗体里的控件都会随着窗体的大小而变化,保证你可以看到整个窗体的所有内容。只要改变窗体的大小,包括标签、文本框、下拉框、列表框、选项框、检查框、图片、普通子窗体、数据子窗体等控件都会自动按相应的比例实时改变大小。写这个控件的初衷主要是以前在开发VB程序时用到resize的控件,觉得比较好用,而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构),而当时我开发的一个项目需要同时适应800*600 和640*480 两种分辨率,所以触发我自己写这方面的程序。经过几次比较大的改动,现在大致可以满足我的需要。一年后,我在网络上找到Ken Getz, Paul Litwin, and Mike Gilbert写的Scale and Resize Your Access Forms演示程序,知道原来在这个世界,还有人与我有同样的想法,他们的功能做得挺棒,只可惜看不到他们的源码。不过知道他们是用API来做的。我比较了两者之间的速度,应该是差不多的。为了让大家了解,我迟点会把他们的演示程序上传。〖accResize1.0〗说明文件一、【主要功能】实现窗口在缩放的时候各控件位置和大小自动调整功能二、文件列表resize.mde 控件缩放的核心代码testresize.mdb 测试缩放效果的例子程序三、〖accResize1.0〗使用方法1. 确保你已经安装了access20002. 将下载的文件用WINRAR解压后放在同一个目录3. 用ACCESS打开(或双击)testresize.mdb,运行其中的窗体文件即可4. 如果你想在你的程序中使用这个功能,只要把resize.mde抄到你的程序目录下,然后打开你的程序,在工具菜单中选择[引用],引用resize.mde即可(你需进入代码状态才能看到工具菜单中的引用子菜单),最后在你自己程序的窗体中的resize事件中加入 resize.Form_myResize Me 这句程序即可。5. 请注意,为了加快窗体缩放的速度,所以程序有个特别注意的地方: 当你在窗体中添加新的控件或改变了位置,需在重新关闭你的程序(即关闭MDB后)再打开才能生效。实际我试过,即使增加新的控件就自动更新,速度亦差不多四、错误反馈1. 如果你发现软件中的错误,欢迎你反馈给作者。五、【使用许可/LICENSE】请仔细阅读以下使用许可,如果您不同意以下任何一点,请立即停止使用此软件。1.〖accResize1.0〗的作者王宇虹授予您对此版本的最终用户使用许可权;2.您不能对软件作任何的软件反向工程,如反汇编,跟踪等;3.您可以分发此软件,但不能收取任何费用或用于商业目的,同时,必须保证所分发的软件包含全部文件,并且不作任何修改;分发的软件应该至少包括我软件所附带的README.txt4.本软件不包含任何使用保证,不能保证适用或不出故障,由于此软件是免费提供,因此作者不对您或别的用户使用此软件所带来的理论上或实际的损失负责;5.如果您用了此软件就等于您同意以上几点许可;6.如果你觉的该软件好用,请发一封Email给作者表示感谢,这些支持将会使作者写出更好软件,谢谢!六、【软件注册费用】完全免费!!本软件所有功能都可以免费使用,完全没有限制。七、【源码费用】如果你对此软件的源码感兴趣,你可以向作者免费索取。你只要发封EMAIL给作者,说明你需要索取这个程序的源码,作者即会把源码EMAIL给你。电子信箱:wang_yu_hong@163.net tmtony@21cn.com你可以到我的主页http://www.zstmcomputer.com 或 http://tmcomputer.6to23.com 免费获得其它完整的应用软件或一些已公开的源码。八、【主要技术】具体请参照
在用C#做桌面程序时,有时后会碰到要修改WinForm 窗体的系统边框样式(系统镶边样式)。如,改变标题栏 的背景,系统图标,系统按钮,或者要做一个自己的 窗体,有自己的背景。那么直接调用win32内部c语言函数 很不方便。怎样才能做有自己的系统边框的C#窗体呢? 我想就是有几年工作经验的程序员,也会觉得那是很麻烦的事。那么,为什么不把这个工作封装成一个控件呢? 下面,是我自己根据以往的经验,做了一个自定义系统边框控件。 使用方法是,自己用图形编辑软件画好窗体背景,然后把此图片作为窗体的背景图片。 再把form窗体的FormBorderStyle属性设置成None; 然后,在窗体代码文件中定义一个控件类对象:public partial class Form1 : Form { CustomBorder.CustomBorderEx cbe = null; public Form1() { InitializeComponent(); cbe = new CustomBorder.CustomBorderEx(this); } } 就可以定义能实现窗体拖动功能的边框。 public partial class Form1 : Form { CustomBorder.CustomBorderEx cbe = null; public Form1() { InitializeComponent(); cbe = new CustomBorder.CustomBorderEx(this, true,new Size(100,100)); } } 上面可以定义一个带拖动,拉伸窗体,调整大小的边框。 有时候需要在关联的窗体上放一些可以随窗体大小改变而自动调整成合适大小位置的控件容器,如,Panel控件。 那么应该把它的大小和位置定为一个客户区内。 得到客户区的方法是 Rectangle rt = cbe.ClientRegion;下面是一个可以正常工作的自定义窗体。 public partial class Form1 : Form { CustomBorder.CustomBorderEx cbe = null; public Form1() { InitializeComponent(); cbe = new CustomBorder.CustomBorderEx(this, true,new Size(100,100)); Rectangle rt = cbe.ClientRegion; this.panel1.Location = new Point(rt.X, rt.Y); this.panel1.Size = new Size(rt.Width, rt.Height); } //窗体Resize事件处理程序 private void Form1_Resize(object sender, EventArgs e) { cbe.InvalidateCompute(); Rectangle rt = cbe.ClientRegion; this.panel1.Location = new Point(rt.X, rt.Y); this.panel1.Size = new Size(rt.Width, rt.Height); } } 上面代码是从边框控件得到可用客户区的位置和大小。 然后,在窗体Resize事件相应方法中把panel1容器的 位置和大小设置成客户区的值。 注意,在调用cbe.ClientRegion之前,最好先调用cbe.InvalidateCompute();方法一下,重新计算一下边框和客户区的位置和大小。 那么,之后我们只要在窗体设计器中,注意把我们的其他一些控件(如,Button 等),放到panel1里面就行。(如果不用上面办法,panel1的大小和位置覆盖住整个winform窗体的话,会导致边框的事件捕捉不到,出现,不能拖动,不能调整大小的情况。) //------------------ 那么自定义系统边框的控件主要的方法有如下几个: 1构造方法: new CustomBorder.CustomBorderEx(this, true,new Size(100,100)); 第一个参数,要关联的winform窗体;第二个参数,表示是否可以改变窗体的 大小;第三个参数,窗体的最小宽和高值。 2属性: cbe.ClientRegion 用来得到窗体从新计算后的客户区大小。 3成员方法: cbe.InvalidateCompute();从新计算调整窗体后的边框位置和大小,客户区位置和大小。 //----------------- 这个控件的版本是v1.0版的,由于工作忙,业余时间少,可能还不够完美。相信以后的版本会好些。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧