| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9134 人关注过本帖
标题:二维数组赋值的问题
只看楼主 加入收藏
sunduke
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-5-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
二维数组赋值的问题
大家好,问题是这样的,我要用多个文本框的方式对我想要的不定行数的数组a(n,4)进行赋值,因为n是我程序中的一个变量不确定为多少,参考一个教程的代码如下,代码用的是对a(3,4)数组的赋值,然而我用redim的方法无法实现,详细代码如下,期望高手把我改改,或者还是我出发的思维就错了,有别的更加好的方法?
程序代码:
Private Sub Command1_Click()
Static a(3, 4) As Integer     '声明 数组
Static i As Integer
For j = 0 To 4        '取文本框控件数组接收到的数据存入二维数组中
  a(i, j) = Val(Text1(j).Text)     '一次提取一行
Next j
For j = 0 To 4
  Text1(j) = ""       '提取一行后清空文本框
Next j
If i = 2 Then          '将要结束时提示可以打印
  Command1.Caption = "打印"
End If
If i = 3 Then
  Label1.Caption = "输入结束,开始处理数据" '数据都提取完毕后提示处理打印
  Command1.Caption = "打印"
  Print: Print: Print: Print
  Print "您 输入的矩阵为:"
  For k = 0 To 3                      '以3行4列的矩阵方式输出数组元素
    For j = 0 To 4
       Print Tab(6 * j); a(k, j);     '在窗体上有间隔的输出
    Next j
    Print
  Next k
  Exit Sub
Else
  i = i + 1
  Label1.Caption = "请您 输入第" & i + 1 & "行数据"     '提示继续输入
  Text1(0).SetFocus                   '光标重新定位
End If
End Sub

Private Sub Text1_GotFocus(Index As Integer) '当文本框控件数组中任何一个控件失去焦点时发生
n = Index
Text1(n).SelStart = 0
Text1(n).SelLength = Len(Text1(n).Text)     '事件发生时文本框内的内容全部选中
End Sub
搜索更多相关主题的帖子: 文本框 
2016-04-22 08:46
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:10 
你的这个需求应该是要ReDim Preserve。只是ReDim 前面的赋值会被清空的
如果使用了 Preserve 关键字,就只能重定义数组最末维的大小
ReDim Preserve ca(x,y) 也就是说只能修改y值

你的情况我觉得可以用Grid控件,mshflexgrid或者datagrid
http://wenku.baidu.com/link?url=HLOMfxrpxE71ZgIFLrZi0wCkEkfsiP8d4nZ4HbOqb1mCCLdYeiAIro4X5-8fvKW7X6VDFqGNvVFYgTBH9rCiocs9iJsXtmio0bmiwkI6wki
上面弄一个Combobox或者text,要用N就选择(输入)N就可以了。
2016-04-22 09:02
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:10 
1,申明静态数组时,无法重定义大小。如你这种,
Static a(3, 4) As Integer     '声明 数组
就无法使用
redim 函数了。
必须申明为动态数组,才能重定义大小
Static a() As Integer     '声明 数组
redim a(3,4)              '设置大小

2、redim 函数,如果需要保存内容的情况下,只能重定义最后一维。

授人于鱼,不如授人于渔
早已停用QQ了
2016-04-22 09:03
sunduke
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-5-8
收藏
得分:0 
回复 3楼 风吹过b
变为动态数组后,redim perseve或者redim什么的都不行,改了后就只能输出一行数组,多行的不行了。也不能实现我反复用一组文本框输入数据,然后得出二维数组,不过还是谢谢了!
2016-04-22 09:22
sunduke
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-5-8
收藏
得分:0 
回复 2楼 xiangyue0510
用datagrid的方法我想到了存入数据库,然后再变为二维数组,不过貌似也麻烦,就是想找个能直接输入生成二维数组,用inputbox其实可以实现,但是感觉太low了,我后面要进行特别复杂的数据公式运算,而且可以数组行数很多,inputbox就太麻烦了。
不知道有没有用datagrid直接变数组的方法,因为datagrid的删除和添加数据的确很方便。
2016-04-22 09:28
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
回复 5楼 sunduke
干嘛要存入数据库?按照你示例的那样,只是展示用的,直接在Grid中手动输入就可以了。
2016-04-22 09:35
sunduke
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-5-8
收藏
得分:0 
已经实现了,说下方法和思路吧。
    因为要编一个公司内部的计算软件,需要手动输入一个动态二维数组,用inputbox方法繁琐,用text文本框输入成为一个二维数据(自己没看明白,也没成果,因为涉及到要用同一个文本框组反复对数组赋值,不知道如何操作)。然后发现datagrid这个控件本身来说就有添加删除修改的功能(样子类似excel),datagrid是直接跟数据库相连的,然后把数据库变为二维数组,即可实现我的要求了。
前面连接数据库的代码就不写了,也很简单。
Rst.MoveLast    ''前面定义Rst = New ADODB.Recordset
i = Rst.RecordCount - 1
j = Rst.Fields.Count - 1
'3 利用循环赋值
ReDim A(i, j) As Variant
For m = 0 To i
If m > 0 Then
Rst.MoveNext
If Rst.EOF Then
Rst.MoveLast
End If
Else
Rst.MoveFirst
End If
For n = 0 To j
A(m, n) = Rst.Fields(n)
Print A(m, n);
Next n
Print
Next m
Cnn.Close
2016-04-22 09:58
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
redim perseve或者redim什么的都不行,改了后就只能输出一行数组,多行的不行了
二个解决方案:一个是方案是 维数反写。
需要变化的放到最后。
如每组数据是 4个元素,不定组数。

定义为:
redim a(4,1)
redim perseve  a(4,2)
redim perseve  a(4,3)
--------例,无错误处理-----------
Dim a() As Long         '保存的内容
Dim j As Long           '计数

Private Sub Command1_Click()
j = j + 1
ReDim Preserve a(4, j)
Dim s() As String
Dim i As Long
s = Split(Text1.Text, " ")
For i = 0 To 3
    a(i + 1, j) = Val(s(i))
Next i
End Sub
----------------------
二种,就是你用的,保存到数据库或者表格控件中。不建议

授人于鱼,不如授人于渔
早已停用QQ了
2016-04-22 10:23
快速回复:二维数组赋值的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031140 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved