list1里有3行数据(假设为A,B,C),在frame1里有三个(text1,text2,text3)输入数据后,
如何实现例:
选中list1里的A
在frame1里的3个text分别输入5然后选list1里的B
此时frame1里的3个text为初始的状态,可以输入新的数据再回到A
A的数据还在。我不知道是要把整个frame换掉还是有什么方法,frame是固定在相同位置的。还望哥哥姐姐们指教。

解决方案 »

  1.   

    选中list1里的A
    在frame1里的3个text分别输入5text1 = 5
    text2 = 5
    text3 = 5然后选list1里的B
    此时frame1里的3个text为初始的状态,可以输入新的数据text1 = ""
    text2 = ""
    text3 = ""再回到A
    A的数据还在。没看懂
      

  2.   

    frame里面的textbox跟普通的没区别。
    Option ExplicitPrivate Sub Form_Load()
    List1.AddItem "A"
    List1.AddItem "B"
    List1.AddItem "C"
    End SubPrivate Sub List1_Click()
    If List1.Text = "A" Then
        Text1.Text = 5
        Text2.Text = 5
        Text3.Text = 5
    End If
    If List1.Text = "B" Then
        Text1.Text = ""
        Text2.Text = ""
        Text3.Text = ""
    End IfEnd Sub
      

  3.   

    Dim s(2) As StringPrivate Sub List1_Click()
        Select Case List1.List(List1.ListIndex)
            Case "A"
                Text1.Text = s(0)
                Text2.Text = s(1)
                Text3.Text = s(2)
            Case "B"
                Text1.Text = ""
                Text2.Text = ""
                Text3.Text = ""
        Case Else
        End Select
    End SubPrivate Sub Text1_Change()
        If List1.List(List1.ListIndex) = "A" Then
            s(0) = Text1.Text
        End If
    End SubPrivate Sub Text2_Change()
        If List1.List(List1.ListIndex) = "A" Then
            s(1) = Text2.Text
        End If
    End SubPrivate Sub Text3_Change()
        If List1.List(List1.ListIndex) = "A" Then
            s(2) = Text3.Text
        End If
    End Sub
      

  4.   

    他的意思是点击A的时候输入的数据要保存着,再回到A时把之前保存的数据显示出来。我想用list1.itemdata(xx)的结果好像实现不了。上面代码的文本框如果用控件数组的话会减少很多。
      

  5.   

    加一个二维数组Dim a() As StringPrivate Sub Form_Load()
        List1.AddItem "A"
        List1.AddItem "B"
        List1.AddItem "C"
        
        ReDim a(2, List1.ListCount - 1)
        
    End SubPrivate Sub List1_Click()
        Dim i As Integer
        
        If Frame1.Tag <> "" Then
            i = Frame1.Tag
            
            a(0, i) = Text1.Text
            a(1, i) = Text2.Text
            a(2, i) = Text3.Text
        End If
        
        Text1.Text = ""
        Text2.Text = ""
        Text3.Text = ""
        
        i = List1.ListIndex
        
        Text1.Text = a(0, i)
        Text2.Text = a(1, i)
        Text3.Text = a(2, i)
        
        Frame1.Tag = List1.ListIndex
            
    End Sub
      

  6.   


    我就是这个意思,text可以改成控件数组
      

  7.   

    也可以加几个隐藏的listbox来做
      

  8.   


    你想拿listbox做导向,我觉得tabscript好看。
      

  9.   

    给你的方法试了吗?下面改成控件数组的形式了。text1是个数组,下标0~2
    Dim s(2) As StringPrivate Sub List1_Click()
        Select Case List1.List(List1.ListIndex)
            Case "A"
                Text1(0).Text = s(0)
                Text1(1).Text = s(1)
                Text1(2).Text = s(2)
            Case "B"
                Text1(0).Text = ""
                Text1(1).Text = ""
                Text1(2).Text = ""
        Case Else
        End Select
    End SubPrivate Sub Text1_Change(Index As Integer)
        If List1.List(List1.ListIndex) = "A" Then
            s(Index) = Text1(Index).Text
        End If
    End Sub
      

  10.   

    list1里有3行数据(假设为A,B,C),
      

  11.   

    text1,text2,text3改成text1数组比较方便text1(0)、text1(1)、text1(2)
    Dim a() As StringPrivate Sub Form_Load()
        '灵活方式,加多少没有关系
        List1.AddItem "A"
        List1.AddItem "B"
        List1.AddItem "C"
        List1.AddItem "D"
        List1.AddItem "E"
        List1.AddItem "F"
        
        ReDim a(Text1.UBound, List1.ListCount - 1)End Sub
    '
    Private Sub List1_Click()
        Dim i As Integer
        Dim j As Integer
        
        '把上次选中的存储
        If Frame1.Tag <> "" Then
            i = Frame1.Tag        For j = 0 To Text1.UBound
                a(j, i) = Text1(j).Text
            Next j
        End If    '清空
        For j = 0 To Text1.UBound
            Text1(j).Text = ""
        Next j
        
        i = List1.ListIndex    '把历史存储的取出
        For j = 0 To Text1.UBound
            Text1(j).Text = a(j, i)
        Next j
        
        Frame1.Tag = List1.ListIndexEnd Sub
      

  12.   

    楼上的代码还不错 
    用 Text1_Change 事件很多余
    在单击list条目时记录就行了文本状态就行了 
    list条目较多时也比较麻烦,二维数组实现起来可能有一点乱
    如果改用xml就轻松多了 这样程序在下次启动时还有记忆 
      

  13.   

    可以把整个frame换掉,通过设置Top等位置代码,把不需要的用Visible =False隐藏起来
      

  14.   


    是这样的,我是通过一个text输入到list1,所以list1的数量会变化
    然后text1(0),text1(1),text1(2)
    要在另一个窗口显示list1中所有条目的text1(0),text1(1),text1(2)
    相加结果,如果符值为空的话,不是不好相加?
      

  15.   


    换你的方法可以实现这样吗?
    我是通过一个text输入到list1,所以list1的数量会变化
    然后text1(0),text1(1),text1(2)
    要在另一个窗口显示list1中所有条目的text1(0),text1(1),text1(2)的相加结果
      

  16.   

    每个list项对应的text1数组个数的固定且确定的吗?直接用循环吧。
    dim i%,j%,s&
    form2.autoredraw=true
    for i=0 to list1.listcount-1
      s=0
      for j=0 to text1.count-1
        s=s + val(text1(j))
      next
      form2.print list1.list(i) & "=" & s
    next
      

  17.   

    用textbox的tag属性来保存点A时的数据就行了
      

  18.   


    都什么不固定?1。list的项不固定?(这个我的程序就可以解决,对list项多少没有限制)2。list不同项对应的text1数组的个数也不固定?
      

  19.   

    我的意思是list中每项用的文本框是不是一样的。如果都是text1的话,那么我上面的代码就可以。另外参考内急贴:
    http://topic.csdn.net/u/20110304/10/7e6fde94-865d-4eb8-af0d-5adc47b2c961.html
      

  20.   

    是的,text1的值都不同的。。
      

  21.   


    个数不同?数据不同?
    你的text1控件数组的个数还变化?就像挤牙膏
      

  22.   

    我觉得我的表达能力有问题吧,我用图和文字再说明下吧我的要求是:
    list1的数量是从text2中输入进去的(数量多少由用户决定),command1的功能是从text2确认输入到list1。text1(0),text1(1),text1(2)是用户自己输入。
    单击list1中第二条再输入text1(0),text1(1),text1(2)一些数据。
    回到ist1中的第一条,之前输的第一条的数据还在。
    以此类似。text2(0),text2(1),text2(2)是把list1中所有的加起来
    list1的第一条。。第二条。。第N条
    text2(0)=list1的第一条的text1(0)+第二条的text1(0)...+第N条的text1(0)
      

  23.   

    上边text3(0),text3(1),text3(2)是把list1中所有的加起来
    list1的第一条。。第二条。。第N条
    text3(0)=list1的第一条的text1(0)+第二条的text1(0)...+第N条的text1(0)
      

  24.   

    定义一个非定长数组,假设为tmp根据listbox中的数据的数量动态变化tmp数组的长度,比如你的listbox中有"a","b","c"3个可选项,那么就把tmp定义为tmp(2)然后根据被选中的listbox中的项将需要保存的数据存入对应的数组tmp中,如上面所述,"a","b","c"3个选项中,选择了"b",并在frame1,frame2,frame3中输入值,在listbox选择其他值的时候,将frame1,2,3中输入的值保存入数组tmp中,因为要存入的数据对应的是"b"的数据,"b"在listbox中对应的位置为1("a"=0,"b"=1,"c"=2,...以此类推),所以将当前frame1,2,3中的数据存入tmp(1)中(你可以考虑将tmp数组设置为多维数组,frame1保存到tmp(1,0),frame2保存到tmp(1,1),frame3保存到tmp(1,2)这样,可以根据需要扩展)当listbox再次被切换至"b"时,只需要将之前保存在tmp数组中的数据读取并放入到界面上就可以了
      

  25.   

    身边没vb开发环境,贴一段别人的代码(我改了下)
    Dim tmp() As String
    dim idx as integer=-1Private Sub List1_Click()
        Dim i As Integer
        Dim j As Integer
        dim result as decimal
        
        '把上次选中的存储
        If list1.listindex <> idx and idx > -1 Then
            redim preserve tmp(list1.listcount,2)'listcount是取得list1的项目总数,具体属性名可能不对
            
            For i = Text1.LBound To Text1.UBound
                a(idx, i) = Text1(i).Text
            Next j
        End If    idx = List1.ListIndex    '把历史存储的取出
        For j = Text1.LBound To Text1.UBound
            Text1(j).Text = a(idx, j)
        Next j
        
        For j = Text3.LBound To Text3.UBound
            result =0
            For j = tmp.LBound To tmp.UBound
                 result += cdec(tmp(j, i))
            Next j
            Text3(i).Text=result
        Next j
    End Sub