乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 127|回复: 8

模块拆分或Form.Code

[复制链接]

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2007-3-9 11:16:27 | 显示全部楼层 |阅读模式
我有一个关于哪个更好的问题(我知道的一个相对术语),表单中的所有代码还是拆分成模块?我有一个带有一堆按钮的表单,当用户选择一个按钮时,它会调用应用的模块。我遇到的问题与范围有关。我有一个实用程序函数,它将当前层设置为变量,更改层,工作,并将层更改回来。我的问题似乎是变量(全局声明)似乎正在失去它的价值。我知道如果我将所有代码都保留在1个模块内,我就不会/不应该有范围问题。把所有代码放在一个地方有什么问题吗?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-3-12 04:38:14 | 显示全部楼层
将所有代码放在一个地方没有错,比如表单等。这完全取决于您希望代码的可移植性和模块化程度。
当我第一次开始编写vba时,我倾向于将所有代码放在一个地方,99%的时间都放在表单模块中。
然而,我现在倾向于尽可能地编写模块化,并且仅将表单用于直接相关的事件
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-3-12 10:10:07 | 显示全部楼层
因为我喜欢“在未处理的错误上中断”而不是“在类模块中中断”,所以我尽量在标准模块中写。从长远来看,从表单中分离一些subs似乎更快,因为首先让它做它需要做的事情,然后让它适应表单。此时,您只是对表单本身进行错误捕获。
因为它是以这种方式编写的,所以它更有可能用于其他目的,因此希望将其留在标准模块中。
所以我想这是我不把所有代码放在一个表单中的主要原因,如果我可以在其他地方使用其中一些代码,就把它们放在一个模块中。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-3-12 14:16:05 | 显示全部楼层
没想到要尝试一下。我是否会在表单初始化中声明枚举,然后在错误检查选择大小写时引用它?
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2007-3-12 14:20:02 | 显示全部楼层
常量来自RR的用户按ESC时的错误检查代码。如果有更好的方法,我也许可以永远扔掉这个常量
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2007-3-12 14:22:06 | 显示全部楼层
意义
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2007-3-12 14:22:49 | 显示全部楼层
我真的不想白费口舌,但是我觉得这个词让我很困惑。以下是其中一个模块代码1]
您的意思是对此进行更改?
  1. Option Explicit
  2. Public Enum CloseMode
  3.   CloseMode_Close=???
  4.   CloseMode_Cancel=&H1B  ' Added here and I would reference CloseMode.CloseMode_Cancel  ?
  5. End Enum
  6. Public Declare Function GetAsyncKeyState Lib "user32" _
  7.                                          (ByVal vKey As Long) As Integer
  8. Public Function AddBKR()
  9.       Dim dimsc As Integer
  10.       dimsc = ThisDrawing.GetVariable("DIMSCALE")
  11.       Dim InsPT As Variant
  12.       Dim intOsMode As Integer
  13.       Dim dblRotation As Double
  14.       Dim objBlockRef As AcadBlockReference
  15.       '************** Esc Code *************
  16.       Dim varCancel As Variant
  17.       On Error GoTo Err_Control
  18.       '************** Esc Code *************
  19.       Call LayerSet("3D-EQPM", acRed)
  20.       intOsMode = ThisDrawing.GetVariable("OSMODE")
  21.       ThisDrawing.SetVariable "OSMODE", 32
  22.       InsPT = ThisDrawing.Utility.GetPoint(, "Pick Insertion Point: ")
  23.       ThisDrawing.SetVariable "OSMODE", 512
  24.       dblRotation = ThisDrawing.Utility.GetAngle(InsPT, "Pick Cabinet Side: ")
  25.       Set objBlockRef = ThisDrawing.ModelSpace.InsertBlock(InsPT, Path & "breaker.dwg", 1, 1, 1, dblRotation)
  26.       '************** Esc Code *************
  27. Exit_Here:
  28.       LayerReSet
  29.       ThisDrawing.SetVariable "OSMODE", intOsMode
  30.       ThisDrawing.SetVariable "DIMSCALE", dimsc
  31.       ThisDrawing.SetVariable "INSUNITS", 1
  32.       Exit Function
  33. Err_Control:
  34.       Select Case Err.Number
  35.             Case -2147352567
  36.                   'Debug.Print Err.Number, Err.Description
  37.                   varCancel = ThisDrawing.GetVariable("LASTPROMPT")
  38.                   If InStr(1, varCancel, "*Cancel*")  0 Then
  39.                         If GetAsyncKeyState(VK_ESCAPE) And 8000 > 0 Then
  40.                               Err.Clear
  41.                               Resume Exit_Here
  42.                         ElseIf GetAsyncKeyState(VK_LBUTTON) > 0 Then
  43.                               Err.Clear
  44.                               Resume
  45.                         End If
  46.                   Else
  47.                         If GetAsyncKeyState(VK_SPACE) Then
  48.                               Resume Exit_Here
  49.                         End If
  50.                         'Missed the pick, send them back!
  51.                         Err.Clear
  52.                         Resume
  53.                   End If
  54.             Case Else
  55.                   MsgBox Err.Description
  56.                   Resume Exit_Here
  57.       End Select
  58. End Function

回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2007-3-12 14:24:01 | 显示全部楼层
当我有时间的时候,我会再看看,但是将const设为私有,应该可以正常工作。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-3-12 14:35:27 | 显示全部楼层

不完全是。我并不是说你应该完全使用我发布的内容。只是那种一般形式。这里有更适合您特定需求的东西。
顺便说一句,在我发布的另一个示例中,我没有明确为枚举的每个成员分配一个值,因为它在我从中提取的代码中是不相关的。
不。枚举应该在文件范围内(在任何过程之外)。
顺便说一句。我认为Bryco是对的。只是将Public Const更改为Private Const会更方便。抱歉,如果我让你白费力气了。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-7 14:23 , Processed in 1.781235 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表