VB中能否定义一个常量数组,并为其赋值?该怎么做?

ttss 2002-04-04 08:11:42
我现在有40几个常量要赋值,但现在还没有具体确定。我想定义一个常量数组,并像C语言中那样拿一个大括号给40多个值一起赋值,哪位高手能指点迷津?小弟不胜感谢!
...全文
2393 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
KiteGirl 2002-04-04
  • 打赏
  • 举报
回复
你想实现什么样的功能呢?好象没什么地方一定要用常量数组吧?
ttss 2002-04-04
  • 打赏
  • 举报
回复
书山有路勤为径,学海无涯苦作舟!
看来我要学得还很多啊!感谢大家的帮忙!
我学到了很多知识!
sonicdater 2002-04-04
  • 打赏
  • 举报
回复
很复杂. 不好实现. 而且我也没试过能不能成功.

VB的数组变量在内存中存放的不是 其内容的地址, 而是一个 SafeArray 结构的地址(即 指针) , 而这个 结构 包含了一个 数组的信息,包括 它的 维数,类型[可变size 还是 固定size ,即 Dim A(1) 还是 Dim A() ], 还包括 fFeatures 标示符. 一句两句是说不清的.
--------------------------------------------------------------------
本人水平有限,
只有建议 你放弃 "想一次 进行 40个 赋值, 又要 保证它是常数 ".
惭愧惭愧.


ttss 2002-04-04
  • 打赏
  • 举报
回复
sonicdater 你说的那个safeArray看起来很高深,你那个flag是干什么的?为什么这么做?
ttss 2002-04-04
  • 打赏
  • 举报
回复
有两个问题:
1. 例如正常我要定义:const A = CONST1,这里的A是不是可以理解成你例子中的TE?
2. 用枚举形定义和我这样定义有什么好处?
例:const A1=9
const A2=7
……
……
const A42=3

sonicdater 2002-04-04
  • 打赏
  • 举报
回复
你想一次 进行 40个 赋值, 又要 保证它是常数 .
实在不好办 .

用 枚举型, 是可以的, 但 它不是 常量 的.

如果你坚持 要赋值后,还是常数, 只有用一种恐怖的方法,

先用 Array 一次性 给 变量赋值 .
再 通过 SafeArray 结构, 添加一个Flag : FADF_FIXEDSIZE

fFeatures = fFeatures And FADF_FIXEDSIZE

这样做很麻烦. 甚至 还不容易成功. 所以, xx 不可兼得 呀.
bestofbest 2002-04-04
  • 打赏
  • 举报
回复
不可以吧,怎么可能定义这样的常量呢?


gz
zyl910 2002-04-04
  • 打赏
  • 举报
回复
作为变量使用!

而且 VB IDE 会自动弹出可以选择的项目


比如:
Private Enum TestEnum
Enum1=1
Enum2=2
End Enum

Private Sub Form_Load()
Dim TE as TestEnum

'观察此时的屏幕
TE=
End Sub
ttss 2002-04-04
  • 打赏
  • 举报
回复
我刚才看了一下枚举形,不太懂。是给常量定义成枚举形之后就能通过其枚举形变量给常量赋值,还是通过枚举形定义的变量可以当成常量使了?
water_j 2002-04-04
  • 打赏
  • 举报
回复
UP!
water_j 2002-04-04
  • 打赏
  • 举报
回复
up!~
thorkhan 2002-04-04
  • 打赏
  • 举报
回复
用枚舉較方便
ehappyhare 2002-04-04
  • 打赏
  • 举报
回复
没必要吧,定义一个6*7的数组,接着给它赋值不就行了?(当然,以后注意不要再改变它的值就行)
zyl910 2002-04-04
  • 打赏
  • 举报
回复
不行!

试一试定义为枚举形:
Private Enum ……
C1=1
C1=2
……
End Enum
ttss 2002-04-04
  • 打赏
  • 举报
回复
给常量赋值用array好像不行!
ttss 2002-04-04
  • 打赏
  • 举报
回复
x 是常量数组吗?我想定义一个6*7的数组怎么做?
sonicdater 2002-04-04
  • 打赏
  • 举报
回复
MyArray = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
TechnoFantasy 2002-04-04
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim x

x = Array(20, 20)
End Sub
Vb写的俄罗斯方块 基本功能全'声明一个整数常量Width,表示游戏界面横向的小正方形数目,初始化为16 Public Const Width As Integer = 16 '声明一个整数常量Height,表示游戏界面横向的小正方形数目,初始化为30 Public Const Height As Integer = 30 '游戏界面的背景色 Public Shared BackColor As Color '小正方形的大小 Public Shared SquareSize As Size = New Size(10, 10) Public Shared g As Graphics '声明一个Graphics变量,用于绘制下一个方块 Public Shared gNext As Graphics '声明一个数组,用于表示游戏界面上的所有小正方形 Private Shared ArrGameField(Width - 1, Height - 1) As CSquare '函数功能:判断ArrGameField(x, y)是否有正方形,有则返回False,无则返回True Public Shared Function IsEmpty(ByVal x As Integer, ByVal y As Integer) As Boolean If x >= 0 And x = 0 And y =0 '在循环体,先判断第y行是否是满的,是的话result增1,并把第y行上的所有小正方形下降一行.最后y递减1 '如果实现把第y行的所有小正方形下降一行:从第y行扫描至第0行,每扫描一行,把上一行的每个小正方形赋值给该行,并修改每一个小正方形的Location属性的值 While Y >= 0 If IsLineFull(Y) Then result += 1 For i As Integer = Y To 0 Step -1 If i > 0 Then For x As Integer = 0 To Width - 1 ArrGameField(x, i) = ArrGameField(x, i - 1) If Not ArrGameField(x, i) Is Nothing Then ArrGameField(x, i).Location = New Point(ArrGameField(x, i).Location.X, ArrGameField(x, i).Location.Y + SquareSize.Height) End If Next Else For x As Integer = 0 To Width - 1 ArrGameField(x, i) = Nothing Next End If Next Else

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧