当前位置:编程学习 > VB >>

vb中我建立了90个label(内容都不同的),然后又搞了个数组 L(89),怎样让一个数组同一个label联系上?谢谢!

vb中我建立了90个label(内容都不同的),然后又搞了个数组 l(89),怎样让一个数组同一个label联系上?谢谢!
我试过 
l(0)=label1 : l(1)=label2……
但是这样输下去我就发神经了...     救救我啊,谢谢 你建立一个label数组不就好了 请问怎样建立?   是那些label已经搞好了的,如果建立一个数组是不是不要之前的? 你往窗体上拖一个label,然后 copy paste,这个时候就有对话框问你要不要创建数组,选yes
然后就创建了 将你若干个label控件那么属性都改为LabelX 即可,改第二个的时候会提示你使用创建控件数组,你要回答是。(更简单的是,将所有的label控件选择上(鼠标在Form上按左键拖拉)然后改Name属性,这个方法Name属性不知道有没有出来,你试一下)

这样,你不需要另外创建数组了,只要

labelx(i)就可以进行访问 如果不想用LABEL数组,可以用Script Control控件。可以把你的labelX当做一个字符串处理。就可以用循环了。不过,还是用数组的好。呵呵。
'先在属性窗口里面将Label1的Index改为0
Dim L(0 to 89) as string
Dim i as Long
L(0)="Label00"
Label1(0).Caption=L(0)
for i=1 to 89
 Load Label1(i)
 L(i)="Label"+Right("0"+CStr(i),2)
 Label1(i).Caption=L(i)
 Label1(i).Top=i\10*150
 Label1(i).Left=60+(i mod 10)*960
 Label1(i).Zorder 0
next
你先说说你为啥一定要用90个Label?然后我再告诉你怎么办。
引用 7 楼 kitegirl 的回复:
你先说说你为啥一定要用90个Label?然后我再告诉你怎么办。


其实我是做一个自己玩的象棋棋谱, 这样做好像很笨,用90个picturebox铺满棋盘,然后编写他们的点击事件,然后这样可以让棋子走到想要的位置,这样顺便定位棋盘
但是由于时间关系,又不知道有什么方法,我真的一个个写了o(-"-)o
引用 8 楼 qiuminga 的回复:
引用 7 楼 kitegirl 的回复:

你先说说你为啥一定要用90个Label?然后我再告诉你怎么办。


其实我是做一个自己玩的象棋棋谱, 这样做好像很笨,用90个picturebox铺满棋盘,然后编写他们的点击事件,然后这样可以让棋子走到想要的位置,这样顺便定位棋盘
但是由于时间关系,又不知道有什么方法,我真的一个个写了o(-"-)o


你为啥不直接用Label或者PictureBox在窗体上定位当棋子呢? 楼主最初的‘方案策划’就没搞好,给自己带来麻烦啊…………

  其实用控件数组是最好的解决方法,你把那些 Label 全部重新更改控件名,改变成控件数组也不是太费事,相信后面的事件代码也比较好处理。

  不过就事论事,楼主的问题这样可以解决:
Option Explicit
 
'假设你的窗口只有那90个Label
'或你需要处理的那90个Label是最后按顺序画上去的
Private arrLab(89) As Label

Private Sub Command1_Click()
   Dim i&, objTemp As Object
   i = 0
   For Each objTemp In Me.Controls
      If (Left$(objTemp.Name, 5) = "Label") Then
         Set arrLab(89 - i) = objTemp     '建立关联
         i = i + 1
      End If
   Next
   '检查一下结果
   For i = 0 To 89
      Debug.Print i, arrLab(i).Left; arrLab(i).Top, arrLab(i).Caption
   Next
End Sub


楼主参考一下吧。
直接用Label控件数组就OK啊
控件建立后再对应数组就比较繁琐了
引用 9 楼 kitegirl 的回复:
引用 8 楼 qiuminga 的回复:
引用 7 楼 kitegirl 的回复:

你先说说你为啥一定要用90个Label?然后我再告诉你怎么办。


其实我是做一个自己玩的象棋棋谱, 这样做好像很笨,用90个picturebox铺满棋盘,然后编写他们的点击事件,然后这样可以让棋子走到想要的位置,这样顺便定位棋盘
但是由于时间关系,又不知道有什么方法,我真的一个个写了o(-"-)……



那90个picturebox只是用来给棋子做行走时候的定位,另外还有32个picturebox来当棋子....
我当初将picturebox复制、粘贴不知道为什么没有提示建立数组的... - -
引用 12 楼 qiuminga 的回复:
引用 9 楼 kitegirl 的回复:

引用 8 楼 qiuminga 的回复:
引用 7 楼 kitegirl 的回复:

你先说说你为啥一定要用90个Label?然后我再告诉你怎么办。


其实我是做一个自己玩的象棋棋谱, 这样做好像很笨,用90个picturebox铺满棋盘,然后编写他们的点击事件,然后这样可以让棋子走到想要的位置,这样顺便定位棋盘
但是由于时间关系,又……


窗体坐标整除棋盘格子尺寸就是棋盘坐标。
棋盘坐标乘以棋盘格子尺寸就是窗体坐标。
把正方形PictureBox定位到窗体坐标减去1/2正方形PictureBox的尺寸,就可以让PictureBox中心对准窗体坐标。
前提是你要将窗体的ScaleMode从twip改成pixel。
一点不难啊!
你为啥要用90个控件去定位呢?那个要活活累死人的! 汗,楼主真有毅力,PFPF- -!!

其实以象棋来说的话,可以自己绘图,而不需要用那么多的Label控件.

先定义一个结构,它用于管理棋子:

type MYTYPE
    mX as long        '在棋盘上的坐标
    mY as long

    mPic as long       '这个棋子的图片,你做一个包含所有象棋图片的图片,再用索引去决定是哪个
    mSel as boolean    '是否被选中,点击棋子时需要绘出被选择的效果
end type

然后定义一个数组,这个数组里就是棋子的数据:

dim mData() as MYTYPE

接下来,首先绘制棋盘,然后根据坐标绘制棋子就行了.

鼠标点击处能得到当前的坐标,则使用这个坐标去遍历这个数组,看看与哪个坐标的距离是在棋子圆周内,则说明点击了这个棋子.

啊,大约就是这样的思路吧,代码应该能少很多:)

睡觉睡觉.
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,