乐筑天下

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

[编程交流] 使用数组文本框值i

[复制链接]

34

主题

105

帖子

91

银币

后起之秀

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

铜币
224
发表于 2022-7-6 17:23:42 | 显示全部楼层 |阅读模式
你好
 
是否可以存储数组的值以供以后使用。
 
我在一个表单上创建一个文本框数组,然后执行
 
  1. For I = 0 To Cnt
  2. ....
  3. ....
  4. ...
  5. next

 
我使用阵列文本框的值在图形中定位多线。然后我隐藏表单并打开第二个表单。这也有一个文本框数组。我使用它们的值在图形中定位多线。现在的问题是,我需要在第二个(当前)表单的计算中使用之前表单阵列文本框中的值。我试着把它们放在公共场所,但似乎没用
 
我想我需要做这样的事情,但不确定这是否可能
 
  1. sub form1
  2. Cnt1 = 5
  3. For I = 0 to Cnt1
  4. TxtBoxFrm1(I).value
  5. next
  6. end sub
  7. sub frm2
  8. cnt2 = 5
  9. For I = 0 to Cnt2
  10. TxtBoxFrm1Tot = TxtBoxFrm1Tot + TxtBoxFrm1(I).value
  11. point(0) = 50
  12. point(1) = TxtBoxFrm1Tot + ...etc
  13. point(2) = 0
  14. etc
  15. etc
  16. next
  17. end sub

 
我想做的是使用Txtbox1(0)。使用Txtbox1(1)计算子Frm2第一次运行第二次时的值。值,然后Txtbox1(2)。价值
 
这可能吗?
 
我希望这有意义?
 
 
干杯
 
col公司
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-6 17:34:36 | 显示全部楼层
在代码模块中将数组声明为“Public”将起作用。
然后,您可以从每个表单模块中引用它们,就好像变量是在每个表单模块中声明的一样。
 
请注意,您也不要在代码模块中声明它们,无论是在模块顶部还是在例程中,因为这将覆盖您在另一个模块中所做的公共声明。
 
我不确定您发布的代码是否是实际代码,因此无法判断您是否实际声明了公共数组,但我看到的代码实际上没有任何作用,我很难想象以下代码如何在没有错误的情况下运行:
 
对于I=0到Cnt1
TxtBoxFrm1(I)。价值
下一个
 
如果无法检查,我会猜测您是否正确声明了公共数组,以及其他一切都不起作用。
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

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

铜币
224
发表于 2022-7-6 17:37:11 | 显示全部楼层
罗西,
 
主窗体代码
 
[code]Public LHTOL As DoublePublic RHTOL As DoublePublic BTMTOL As DoublePublic TOPTOL As DoublePublic CwWid As DoublePublic MyTranYpos As DoublePublic Sub constants()Ypos=txtbxttransmysrtposhtol=TxtBxTolLH。ValueRHTOL=TxtBxTolRH。值BTMTOL=TxtBxTolBtm。ValueTOPTOL=TxtBxTolTop。值CWWID=TxtBxCWWid。ValueEnd SubPrivate Sub CmdCreateCW\u Click()CreateStrucOpEnd SubPrivate Sub CreateStrucOp()'此子对象将周长结构洞口矩形Dim plineObj\u创建为AcadLWPolyline Dim点(0到9),作为双暗颜色,作为acadacmcmcolor Set color=\uacadapplication。GetInterfaceObject(“AutoCAD.AcCmColor.17”)调用颜色。SetRGB(255,127,0)'定义二维多段线点点(0)=0:点(1)=0点(2)=TxtBxSOWid。值:点(3)=0点(4)=TxtBxSOWid。值:点(5)=TXTBXSohight。数值点(6)=0:点(7)=TXTBXSohight。值点(=0:点(9)=0’在模型空间集合plineObj\u SO=ThisDrawing中创建一个轻量多段线对象。模型空间在此图形中添加LightweightPolyline(点)。应用ZoomAll plineObj_SO。层=“0”plineObj\u SO。线型=“隐藏”plineObj\u SO。LinetypeScale=TxtBxSOWid。值*TXTBXSohight。值/2#plineObj_SO。TrueColor=color ZoomAll CreateLhMullEnd SubPrivate Sub CreateLhMull()'此子对象将左侧竖梃im StrucOpHght创建为DoubleDim mLineObj\u LhMull作为AcadMLineDim点(0到5)作为DoubleStrucOpHght=txtbxsohight。ValueStrucOpWid=TxtBxSOWid。值此图纸。SetVariable“CMLSTYLE”,TxtBxMLineStyle。值'
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

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

铜币
224
发表于 2022-7-6 17:44:00 | 显示全部楼层
第二个表单代码
 
Public I作为IntegerPublic CntPublic CntTransomQtyDim TxtbxTransomYSrtPos()作为MSForms。TextBoxDim Lbls()作为MSForms。LabelPrivate Sub CmdClearForm_Click()'UFAutoDrwCwTranInptUnload MeUFAutoDrwCwTranInpt。ShowEnd SubPrivate Sub CmdCreate\u Click()UFAutoDrwCwTranInpt。Caption=“Transon计算…..注意:自动计算结束间隔”CreateTransomTextBoxCreateTransomLabelsEnd SubPrivate Sub CreateTransomTextBox()Dim numButtons作为整数:numButtons=TxtBxTranNum。ValueReDim TxtbxTransomYSrtPos(numButtons)'Dim I As IntegerCntTransomQty=numButtonsnumButtons=numButtons-1Cnt=numButtons for I=0 To numButtons'-2#'在flySet TxtbxTransomYSrtPos(I)=Me上创建控件。控制。添加(“Forms.textbox.1”,“txtbxtransmysrtpos”和LTrim$(Str$(I)),True)“设置其位置和大小textbxtransmysrtpos(I)。高度=20:TxtbxTransomYSrtPos(I)。宽度=100TxtbxTransomYSrtPos(I)。左=5:TxtbxTransomYSrtPos(I)。顶部=35+(I*25)+5下一步,我将围绕文本框调整窗体大小。高度=400Me。顶部=30Me。左=200'Me。高度=35+((纽扣+2)*25)“Me。宽度=5+((numButtons+2)*40)“CreateTransomLabelsEnd SubPrivate Sub CreateTransomLabels()Dim numLabels作为整数:numLabels=TxtBxTranNum。ValueReDim Lbls(numLabels)Dim MyStrLblBayNoFor I=0 To numLabels-3'在flySet Lbls(I)=Me上创建控件。控制。添加(“Forms.label.1”,“Lbls”和LTrim$(Str$(I)),True)“Set Lbls(I)=Me。控制。添加(“Forms.label.1”)“works for 1No”设置其位置和大小bls(I)。高度=20:Lbls(I)。宽度=100Lbls(I)。左=105:Lbls(I)。顶部=35+(I*25)+5'Lbls(I)。高度=20:Lbls(I)。宽度=100'Lbls(I)。左=105:Lbls(I)。顶部=35+(I*25)+5'Lbls(I)。Caption=“间隔编号”和ILbls(I)。Caption=“CL Transom No.”&I+1下一个I'调整文本框周围的表单大小。宽度=200'Me。高度=35+((numLabels+2)*25)UFAutoDrwCwMullInpt。ScrollHeight=35+((numLabels+2)*25)*10End SubPrivate Sub CmdBCreateTransom1Row\u Click()'此Sub创建中间TransomDim mLineObj\u Trans1strow作为AcadMLineDim点(0到5),作为DoubleDim MyTranYpos作为DoubleLHTOL=UFrmAutoDrawCW。TxtBxTolLH。ValueRHTOL=UFrmAutoDrawCW。TxtBxTolRH。值BTMTOL=UFrmAutoDrawCW。TxtBxTolBtm。ValueTOPTOL=UFrmAutoDrawCW。TxtBxTolTop。值CWWID=UFrmAutoDrawCW。TXTBxCWID。I=0到CntMyTranYpos=TxtbxTransomYSrtPos(I)的值。值此图纸。SetVariable“CMLSTYLE”,UFrmAutoDrawCW。TxtBxMLineStyle。值'
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-6 17:46:56 | 显示全部楼层
嗯,我还是有点迷茫-我在你的第一篇帖子之后开始编辑你的代码-然后,后来,我看到了另一篇帖子,有一个“主表单”,一个“第一表单”,还有一个“第二表单”。。所以我不会费心发布我编辑的单个表单的清理代码。。。
 
我看到的问题有两个方面:第一,必须从代码模块而不是表单模块声明全局变量。其次,即使在你声明了globals之后,你也没有在任何地方使用它们。
 
然而,您正在使用“子常量”例程做正确的事情,即:在每种形式中都有一个例程,用于将文本框的值设置为移动到代码模块的全局变量。但是,不要在其他地方引用文本框*。应该只有一行代码引用文本框,即将文本框值设置为全局变量的代码。从那时起,使用全局值-否则,您将使用两组可能具有不同值的变量。
 
此外,Id*将您的“子常量”重命名为其他名称,例如“子种子变量”,因为它们不是常量,这很容易混淆,并且太接近真实的保留VBA名称。
 
然后将所有不再引用表单变量的例程移出表单模块,并移入代码模块。
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

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

铜币
224
发表于 2022-7-6 17:53:31 | 显示全部楼层
罗西,
 
你说代码模块是什么意思?
 
Col公司
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-6 17:56:33 | 显示全部楼层
 
在VBA IDE中,可以单击“插入”菜单,然后选择“用户窗体”、“模块”或“类模块”。我的意思是“模块”。
由于这三个选项中有两个包含“模块”一词,因此我和其他人将“模块”称为“代码模块”,而不是“类模块”。
 
(如果您还不感到困惑的话,Userform是一个类模块)
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

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

铜币
224
发表于 2022-7-6 18:04:21 | 显示全部楼层
好啊不,至少在“userform是一个类模块”之前,我很理解
 
谢谢你今天晚些时候给我的帮助。
 
干杯
 
col公司
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

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

铜币
224
发表于 2022-7-6 18:11:53 | 显示全部楼层
Rocheey,谢谢你的帮助,我已经使用了代码,当代码在第二个表单上运行时,它确实会获取文本框的值,但它只获取最后一个值。对于一个基本示例,第一个文本框,textbox1(0到5)数组的值为“100200300400500600”,而textbox2(0到5)的值为150250350450550,650“当我运行第一个表单时,我使用textbox1()。计算中的值第一次运行代码时为“100”,第二次运行时为“200”,等等。然后当cnt完成时,代码完成并进入下一个表单。下一个代码中的计算有点复杂。我试图做的是使用textbox1(0)+textbox2(0)并将它们相加(这不完全是我想做的,但为了简化)因此,第一次运行代码时,它将是“100+150”,然后是“200+250”等等,直到cnt完成。
 
第一个表单代码运行良好,当第二个表单运行时,而不是我想要的,我得到“600+150”,然后是“600+250”,然后是“600+350”,因此它只使用textbox1数组中的最后一个值。
 
 
 
第一个表单文本框=UFAutoDrwCwMullInpt。TxtbxMullionXSrtPos(一)。价值
 
 
[code]对于I=0到CntMyTranYpos=TxtbxTransomYSrtPos(I)。ValueMyBayWidVar=UFAutoDrwCwMullInpt。TxtbxMullionXSrtPos(一)。值'如果不添加该值,它将运行,但只记住最后一个textbox1()ThisDrawing的值。SetVariable“CMLSTYLE”,UFrmAutoDrawCW。TxtBxMLineStyle。值'
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-6 18:17:32 | 显示全部楼层
上帝,从哪里开始?六羟甲基三聚氰胺六甲醚,。在代码模块中有一个控制阵列,暗显为公共?它应该位于form模块中,并将值作为数组存储在代码模块中。你有两个不同的代码模块;你只需要一个。您仍然(多次)从表单外部引用文本框中的值。看起来您正在引用其他表单的文本框中的值-我看到了文本框引用前面的点限定符(我假设这意味着您在文本框前面有表单名称)。
 
这篇文章仍然有太多的代码缺失,你看不到发生了什么。这也是为什么您将代码设置为模块化的原因——让每个单独的部分几乎独立运行,以测试确保其正确运行。
 
我必须假设您在变量范围方面仍然存在问题-您正在引用其他过程无法使用的变量和对象。同样,这就是为什么您将变量的值从控件设置到公共数组中,并停止引用控件的值。
 
你必须更深入地了解你的e
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 15:20 , Processed in 0.897821 second(s), 72 queries .

© 2020-2025 乐筑天下

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