VB窗体中事件太多

thesky102 2013-08-27 10:19:33
我引用了SSTab控件(8个Tab页),然后程序在一个窗体内就有好多控件,有十几个command和combo_click事件,加起来有2000多行代码,感觉很乱,想问有没有什么办法可以把代码归类啊,比如一个tab页的代码都放在一个模块里面什么的。。。
...全文
220 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-08-27
  • 打赏
  • 举报
回复
每个tab做成一个用户控件。
熊孩子开学喽 2013-08-27
  • 打赏
  • 举报
回复
十几个command,2000多行代码一个窗体算不上多. 之所以使用tab, 是为了将各种功能控件分门别类而已. 这样可以不会让用户一眼看到过多控件而觉得软件太过复杂混乱. 先说说控件分组, 你可以使用容器, 比如frame, 创建frame控件数组, 数组的个数当然是和tab的页数相等. 然后你只需把各个控件按照你的思路放置到各个frame中即可. 这一点跟程序本身的逻辑并无关系. 然后说到控件事件太多. 其实也不会太多. 因为还是可以通过控件数组解决. 比如command按钮, 假设你一共8个tab页上一个有30个command, 那你就创建这30个的command数组即可. 而在command_click事件中也只需要简简单单一个select case index即可区分. 这样写还更省地方了. 至于是否把tab页内的代码放到模块里去, 这完全是随你便的.
  • 打赏
  • 举报
回复


'主窗体form1,再添加2个功能用途的窗体:FormA1,FormA2

'版权所有,设计开发:逍遥爱迪生,QQ:1085992075
'欢迎转载分享,使用时请勿删除相关版权信息

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Sub 去除窗体标题栏(Hwnd As Long)
Dim sy As Long
Dim newsy As Long
Const GWL_STYLE = -16
Const WS_CAPTION = &HC00000
Const WS_BORDER = &H800000
Const WS_THICKFRAME = &H40000
Const WS_SIZEBOX = WS_THICKFRAME
sy = GetWindowLong(Hwnd, GWL_STYLE)
newsy = SetWindowLong(Hwnd, GWL_STYLE, (sy - WS_CAPTION) And Not WS_SIZEBOX) ' And Not WS_BORDER)
End Sub

Private Sub SSTab1_Click(PreviousTab As Integer)
Dim Frm As Form
Select Case SSTab1.Tab
Case 0
Set Frm = FormA1
Case 1
Set Frm = FormA2
End Select

If Not Frm.Visible Then
Frm.Show

去除窗体标题栏 Frm.Hwnd
SetParent Frm.Hwnd, SSTab1.Hwnd
End If
Frm.Move 50, SSTab1.TabHeight + 50, SSTab1.Width - 100, SSTab1.Height - SSTab1.TabHeight - 100
End Sub

Private Sub Form_Load()
SSTab1_Click 0
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End
End Sub

  • 打赏
  • 举报
回复
你也可以做8个窗体,代码全写在窗体中,然后呢,点哪个的时候就把那个窗体SETPARENT到这个TAB界面上就行了。
  • 打赏
  • 举报
回复
你就写8个模块BAS文件,或4个,每个过程名称就叫TAB1,TAB2 这样一看就明白了 sub tab1() ' end sub
thesky102 2013-08-27
  • 打赏
  • 举报
回复
引用 7 楼 caozhy 的回复:
每个tab一个用户控件,然后再组装起来 取数据不要用timer,用死循环+doevents+sleep
表示你这两句话都不太明白。。。。能给解释下么?
threenewbee 2013-08-27
  • 打赏
  • 举报
回复
每个tab一个用户控件,然后再组装起来 取数据不要用timer,用死循环+doevents+sleep
thesky102 2013-08-27
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
[quote=引用 4 楼 thesky102 的回复:] [quote=引用 3 楼 caozhy 的回复:] [quote=引用 2 楼 thesky102 的回复:] [quote=引用 1 楼 caozhy 的回复:] 每个tab做成一个用户控件。
但是可能反复的看各个tab啊,而且各个tab之间有数据传递。[/quote] 使用属性和事件传递嘛。[/quote] 我这样行不行呢?就是还是用八个tab,然后每个tab页下边的主要代码分别写在八个模块里(子过程),然后在主form代码里调用相应的模块。这样感觉就是代码找起来轻松了,但是不知道会不会带来其他的问题。[/quote] 那不是更麻烦。双击界面找不到对应的代码,还得找是哪个模块。真不知你怎么想的。[/quote] 你是说把每个tab拆成一个窗体里面么? 另外还有个问题,就是从SQL要去数据,用timer的话,肯定会有时间浪费,如果间隔设置小了又担心代码不能执行完,所以想问有没有办法可以解决这个问题。数据是另一方面取来的,我这边只能从SQL取数据,实时性要求也特别高。
threenewbee 2013-08-27
  • 打赏
  • 举报
回复
引用 4 楼 thesky102 的回复:
[quote=引用 3 楼 caozhy 的回复:] [quote=引用 2 楼 thesky102 的回复:] [quote=引用 1 楼 caozhy 的回复:] 每个tab做成一个用户控件。
但是可能反复的看各个tab啊,而且各个tab之间有数据传递。[/quote] 使用属性和事件传递嘛。[/quote] 我这样行不行呢?就是还是用八个tab,然后每个tab页下边的主要代码分别写在八个模块里(子过程),然后在主form代码里调用相应的模块。这样感觉就是代码找起来轻松了,但是不知道会不会带来其他的问题。[/quote] 那不是更麻烦。双击界面找不到对应的代码,还得找是哪个模块。真不知你怎么想的。
thesky102 2013-08-27
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
[quote=引用 2 楼 thesky102 的回复:] [quote=引用 1 楼 caozhy 的回复:] 每个tab做成一个用户控件。
但是可能反复的看各个tab啊,而且各个tab之间有数据传递。[/quote] 使用属性和事件传递嘛。[/quote] 我这样行不行呢?就是还是用八个tab,然后每个tab页下边的主要代码分别写在八个模块里(子过程),然后在主form代码里调用相应的模块。这样感觉就是代码找起来轻松了,但是不知道会不会带来其他的问题。
threenewbee 2013-08-27
  • 打赏
  • 举报
回复
引用 2 楼 thesky102 的回复:
[quote=引用 1 楼 caozhy 的回复:] 每个tab做成一个用户控件。
但是可能反复的看各个tab啊,而且各个tab之间有数据传递。[/quote] 使用属性和事件传递嘛。
thesky102 2013-08-27
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
每个tab做成一个用户控件。
但是可能反复的看各个tab啊,而且各个tab之间有数据传递。

1,453

社区成员

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

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