注册 登录
编程论坛 VB6论坛

关于简化问题!!!各位帮忙看看!!!!!!!

qiziyun 发布于 2013-01-31 21:38, 922 次点击
程序代码:

[local]1[/local]
Private Sub Command1_Click()
       Call 写入INI("Form设置", "Text1", Text1.Text)
       Call 写入INI("Form设置", "Text2", Text2.Text)
       Call 写入INI("Form设置", "Text3", Text3.Text) '
       Call 写入INI("Form设置", "Text4", Text4.Text)
       Call 写入INI("Form设置", "Text5", Text5.Text)
       Call 写入INI("Form设置", "Text6", Text6.Text)
       Call 写入INI("Form设置", "Text7", Text7.Text)
       Call 写入INI("Form设置", "Text8", Text8.Text)
       Call 写入INI("Form设置", "Text9", Text9.Text)
       Call 写入INI("Form设置", "Text10", Text10.Text)
       Call 写入INI("Form设置", "Text11", Text11.Text)
       Call 写入INI("Form设置", "Text12", Text12.Text)
       Call 写入INI("Form设置", "Text13", Text13.Text)
       Call 写入INI("Form设置", "Text14", Text14.Text)
       Call 写入INI("Form设置", "Text15", Text15.Text)
       Call 写入INI("Form设置", "Text16", Text16.Text)
       Call 写入INI("Form设置", "Text17", Text17.Text)
       Call 写入INI("Form设置", "Text18", Text18.Text)
       Call 写入INI("Form设置", "Text19", Text19.Text)
       Call 写入INI("Form设置", "Text20", Text20.Text)
       Call 写入INI("Form设置", "Text21", Text21.Text)
       Call 写入INI("Form设置", "Text22", Text22.Text)
       Call 写入INI("Form设置", "Text26", Text26.Text)
       Call 写入INI("Form设置", "Text24", Text24.Text)
       Call 写入INI("Form设置", "Text25", Text25.Text)
       Call 写入INI("Form设置", "Text26", Text26.Text)
       Call 写入INI("Form设置", "Text27", Text27.Text)
       Call 写入INI("Form设置", "Text28", Text28.Text)
       Call 写入INI("Form设置", "Text29", Text29.Text)
       Call 写入INI("Form设置", "Text30", Text30.Text)
'       Call 写入INI("Form设置", "Text31", Text31.Text)
'
       Call 写入INI("Form设置", "Text32", Text32.Text)
'
       Call 写入INI("Form设置", "Text33", Text33.Text)
'
       Call 写入INI("Form设置", "Text34", Text34.Text)
End Sub

Private Sub Command2_Click()
      Text1 = 读取INI("Form设置", "Text1", "默认值")
      Text2 = 读取INI("Form设置", "Text2", "默认值")
      Text3 = 读取INI("Form设置", "Text3", "默认值")
      Text4 = 读取INI("Form设置", "Text4", "默认值")
      Text5 = 读取INI("Form设置", "Text5", "默认值")
      Text6 = 读取INI("Form设置", "Text6", "默认值")
      Text7 = 读取INI("Form设置", "Text7", "默认值")
      Text8 = 读取INI("Form设置", "Text8", "默认值")
      Text9 = 读取INI("Form设置", "Text9", "默认值")
      Text10 = 读取INI("Form设置", "Text10", "默认值")
      Text11 = 读取INI("Form设置", "Text11", "默认值")
      Text12 = 读取INI("Form设置", "Text12", "默认值")
      Text13 = 读取INI("Form设置", "Text13", "默认值")
      Text14 = 读取INI("Form设置", "Text14", "默认值")
      Text15 = 读取INI("Form设置", "Text15", "默认值")
      Text16 = 读取INI("Form设置", "Text16", "默认值")
      Text17 = 读取INI("Form设置", "Text17", "默认值")
      Text18 = 读取INI("Form设置", "Text18", "默认值")
      Text19 = 读取INI("Form设置", "Text19", "默认值")
      Text20 = 读取INI("Form设置", "Text20", "默认值")
      Text21 = 读取INI("Form设置", "Text21", "默认值")
      Text22 = 读取INI("Form设置", "Text22", "默认值")
      Text24 = 读取INI("Form设置", "Text24", "默认值")
      Text25 = 读取INI("Form设置", "Text25", "默认值")
      Text26 = 读取INI("Form设置", "Text26", "默认值")
      Text27 = 读取INI("Form设置", "Text27", "默认值")
      Text28 = 读取INI("Form设置", "Text28", "默认值")
      Text29 = 读取INI("Form设置", "Text29", "默认值")
      Text30 = 读取INI("Form设置", "Text30", "默认值")


我想把这个代码简化一下!

思路是列如:
a=Text(i) + 1
Call 写入INI("Form设置", "& a &", a.Text)
具体应该怎么书写啊,不然控件多了就一老大一串!麻烦各位了!!!



[ 本帖最后由 qiziyun 于 2013-2-4 06:07 编辑 ]
22 回复
#2
lowxiong2013-01-31 23:22
如果你规定好所有文本控件命名规则不变的话,可以用如下代码简化
Private Sub Command1_Click()
  Dim a As Control, i As Integer, n As String
  For i = 1 To 30
    n = "TEXT" & Trim(Str(i))
    For Each a In Me.Controls
      If UCase(a.Name) = n Then a=读取INI("Form设置", a.Name, a)
    Next
  Next
End Sub
Private Sub Command2_Click()
  Dim a As Control, i As Integer, n As String
  For i = 1 To 30
    n = "TEXT" & Trim(Str(i))
    For Each a In Me.Controls
      If UCase(a.Name) = n Then a=读取INI("Form设置", a.Name, "默认值")
    Next
  Next
End Sub

#3
yz10252013-02-01 08:54
Control Array(index) 能缩更短
编程前先想好就能省很多心
#4
yz10252013-02-01 09:03
程序代码:

Option Explicit

Private Const Name1 = "Form设置"
Private Const Name2 = "默认值"

Private Sub Command1_Click()
Dim i As Integer

    For i = 0 To Text1.Count - 1
       Call 写入INI(Name1, "Text1" & i, Text1(i).Text)
    Next i
   
End Sub

Private Sub Command2_Click()
Dim i As Integer

    For i = 0 To Text1.Count - 1
       Text1(i) = 读取INI(Name1, "Text1" & i, Name2)
    Next i
   
End Sub


就算几百个控件~一样就这几行~

[ 本帖最后由 yz1025 于 2013-2-1 09:07 编辑 ]
#5
qiziyun2013-02-02 04:40
回复 4楼 yz1025
提示未找到方法或数据成员,.Count提示是这个!但是这个好像要加val函数吧!但是好像有了Count不加val也行吧!我实验了一直出错!!!麻烦你看看咯是不是那里没写对!!
#6
qiziyun2013-02-02 04:49
回复 2楼 lowxiong
lowxiong    Control  怎么是改变这个呢!!没跟上你思路!我需要动态改变的!你这个一旦写入就改不了了!!
#7
bczgvip2013-02-02 06:05
点击 Text1 控件 按 Ctrl+C 复制,再粘贴。就能得到控件数组。
#8
lowxiong2013-02-02 07:05
回复 6楼 qiziyun
我的程序是用来扫描窗体里控件的,发现是文本控件名称是“Text+编号”的,就调用你的子程序,你试着运行下就知道了,我的代码通过调试了的,能达到你的要求。3楼的是要你把所有的文本控件设置成控件数组,这样就非常方便简化代码了。
#9
qiziyun2013-02-02 08:09
回复 7楼 bczgvip
bczgvip 早啊!!你说的是要我在那里复制呢?主要是代码复制进去我直接就不能运行!具体应该怎么写啊麻烦你了
#10
qiziyun2013-02-02 08:23
我明白你意思了!是叫我在制作控件时候就复制然后就产生TEXE(1)2、3。。。。。这样控件是吗!这样的话我其他代码也要全改了!不能像前面你教我了一个写入注册表的方法
Private Sub Command1_Click()
    SaveSettingEx Text1, Text2, Text3, Text4, Text5, Text6
End Sub
这样来实现吗!注册表那个他麻烦了!
具体需要怎么写呢!

bczgvip就麻烦你啦
#11
qiziyun2013-02-02 21:17
回复 7楼 bczgvip
bczgvip 在吗!帮我看看啊
#12
bczgvip2013-02-02 22:54
注册表的还在用啊,不是说用INI么?
SaveSettingEx Text1(0),Text1(1),Text1(2) ' ... 这样就...是啊。不行了。主要是name 属性重复呐。
控件太多,就用2、4楼的代码吧。
#13
qiziyun2013-02-04 03:04
回复 12楼 bczgvip
bczgvip你还没睡吗?
2楼和你的代码我用了有问题,2楼的是只能保存1次,不能随时修改,你的那个是我无法运行啊。
详细的帮我修改一下嘛
#14
wube2013-02-04 04:42
記得“風”哥也有一招~宣告控件在賦予控件名稱~分段作~

二樓的是去掃出你表單所有控件~在依據特徵去做事~
四樓是一開始設計時就把控件定義為數組~一次處理~
“風”哥那招是先定義一個指定控件的空類~再賦予名稱~再處理~
方法很多~主要看你完整需求~就針對你的主題~四樓代碼最簡潔~
若你只說了一半的需求~那要使用怎樣的代碼去實現~就還得估量估量了~
每次問題只說一半~代碼絕對是亂七八糟~整體的一致性很重要~
和未來的拓展性~個人淺見~
#15
qiziyun2013-02-04 06:06
回复 12楼 bczgvip
对啊!NAME也要跟随TEXT变化的
只有本站会员才能查看附件,请 登录

声明那些我是写在模块里的!!建立一个窗体来操作!!
我用了2楼和4楼版主的了!2楼是保存后就不能动态保存了!不能改变!
4楼是提示错误~~~~、
具体应该怎么书写啊!把 他们全加到数据变量里
#16
lowxiong2013-02-04 07:52
回复 15楼 qiziyun
二楼代码里没有调用"写入INI"的函数,不知道你改了没有,如果是原代码,实际上一次也写入不了。
二楼代码主要是针对你不愿改设计而写的,实际上你在设计前针对功能就需要做简化代码的设计,你这个情况用控件数组最简洁。二楼修改后的代码如下:
Private Sub Command1_Click()
  Dim a As Control, i As Integer, n As String
  For i = 1 To 30  '这里的30需要根据你使用的文本框实际个数决定
    n = "TEXT" & Trim(Str(i))
    For Each a In Me.Controls
      If UCase(a.Name) = n Then Call 写入INI("Form设置", a.Name, a)
    Next
  Next
End Sub
Private Sub Command2_Click()
  Dim a As Control, i As Integer, n As String
  For i = 1 To 30
    n = "TEXT" & Trim(Str(i))
    For Each a In Me.Controls
      If UCase(a.Name) = n Then a=读取INI("Form设置", a.Name, "默认值")
    Next
  Next
End Sub
#17
qiziyun2013-02-04 17:32
回复 16楼 lowxiong
lowxiong 多谢啊!我回家后试试!!!!!!!
#18
ok10101012013-02-04 18:05
Dim yxtt As Variant
for i=0 to 3 ''一共有多少条比如4条
yxtt = Array("Text1", "Text2", "Text3", "Text4")
Call 写入INI("Form设置", "(yxtt(i))", (yxtt(i)).Text)
Next i

以此类推
#19
qiziyun2013-02-05 16:28
回复 16楼 lowxiong
owxiong 我修改过的!对前面2楼那个我修改过的是修改不了!!~~~~~~~~~现在用你这个没问题了!!谢谢了!!!!!
#20
qiziyun2013-02-05 17:44
回复 18楼 ok1010101
ok1010101 你的我改成这样才运行了!但是INI不记录!

Private Sub Command1_Click()
Dim yxtt As Variant, i As Integer
For i = 0 To 11 ''一共有多少条比如4条
yxtt = Array("Text1", "Text2", "Text3", "Text4", "Text5", "Text6", "Text7", "Text8", "Text9", "Text10", "Text11", "Text12")
Call 写入INI("Form设置", "(yxtt(i))", (yxtt(i)))
Next i
End Sub
Private Sub Command2_Click()
Dim yxtt As Variant, i As Integer
For i = 0 To 11 ''一共有多少条比如4条
yxtt = Array("Text1", "Text2", "Text3", "Text4", "Text5", "Text6", "Text7", "Text8", "Text9", "Text10", "Text11", "Text12")
Call 读取INI("Form设置", yxtt(i), "默认值")
Next i
End Sub
#21
lowxiong2013-02-05 17:46
从你的言语中可以看出写程序你还没入门,如果入门了你就很容易知道二楼的代码错在哪里,如何修改的。
ok1010101的代码完全不可行,但不失为一种思路,主要思路大概应用下列代码:
-----------------------------------
dim a(30) as textbox
set a(0)=text1
-----------------------------------
希望你有真正的提高!

[ 本帖最后由 lowxiong 于 2013-2-5 17:53 编辑 ]
#22
qiziyun2013-02-05 20:13
回复 21楼 lowxiong
lowxiong   你这样的写法比你写的那个更精简吗?需要怎么书呢教我啊
#23
lowxiong2013-02-05 22:53
回复 22楼 qiziyun
不会,只是把你自定义的无关联的textbox控件映射到一个自定义的textbox控件数组中去,以后对这个自定义的控件数组用循环完成所需要的操作即可,非常简洁明了。这种方法需要多用一个循环把窗体内的textbox控件映射到自定义的textbox控件数组a()中。
1