| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 516 人关注过本帖
标题:抽签决定30个人的出场次序,点击抽签按钮即数字滚动然后显示数字,已抽取的数 ...
只看楼主 加入收藏
honey111
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-6-6
结帖率:100%
  已结贴   问题点数:10  回复次数:7   
抽签决定30个人的出场次序,点击抽签按钮即数字滚动然后显示数字,已抽取的数字则不重复(抽一个少一个),界面需要一个按钮和一个标签
请高手指教
2018-06-07 11:26
wds1
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:22
帖 子:240
专家分:1312
注 册:2016-3-10
  得分:5 
Public b
Public index

'抽签30个,点击抽签显示数字,不重复(抽一个少一个)
Private Sub Form_Load()
  index = 1
   Randomize
  ReDim b(1 To 1) As Integer
  b(1) = Int(Rnd * 30) + 1          '生成第一个随机标签标
  Do
    Call Diff1(Int(Rnd * 30) + 1, b) '生成后边的29个随机标签
  Loop Until UBound(b) = 30
End Sub

Private Sub Command1_Click() '点击一次,显示一个
  Label1.Caption = b(index)
  index = index + 1
  Debug.Print b(index - 1)
  If index = 31 Then
    MsgBox ("完成抽签")
  End If
End Sub



Public Function Diff1(txt1, ByRef Array1)   '如果txt不在array数组,则增加
  For i = 1 To UBound(Array1)
    If txt1 = Array1(i) Then Exit For
    DoEvents
  Next
  If i > UBound(Array1) Then
   ReDim Preserve Array1(1 To i): Array1(i) = txt1
  End If
End Function

[此贴子已经被作者于2018-6-7 13:32编辑过]

2018-06-07 13:28
honey111
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-6-6
  得分:0 
回复 2楼 wds1
完美!非常感谢!
2018-06-07 14:49
wufuzhang
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
威 望:1
帖 子:33
专家分:155
注 册:2017-8-9
  得分:5 
回复 2楼 wds1

你的程序里面没有实现数字滚动然后出现数字的功能,将你的程序
稍微修改了一下,窗体再加一个Timer控件就可以了,代码如下:
Option Explicit

Public b
Public index
Public TCount As Integer''时钟刷新次数

'抽签30个,点击抽签显示数字,不重复(抽一个少一个)
Private Sub Form_Load()
  Timer1.Enabled = False
  index = 1
   Randomize
  ReDim b(1 To 1) As Integer
  b(1) = Int(Rnd * 30) + 1          '生成第一个随机标签标
  Do
    Call Diff1(Int(Rnd * 30) + 1, b) '生成后边的29个随机标签
  Loop Until UBound(b) = 30
End Sub

Private Sub Command1_Click() '触发时钟
  Timer1.Enabled = True
  Timer1.Interval = 20
End Sub

Public Function Diff1(txt1, ByRef Array1)   '如果txt不在array数组,则增加
  Dim i As Integer
  For i = 1 To UBound(Array1)
    If txt1 = Array1(i) Then Exit For
    DoEvents
  Next
  If i > UBound(Array1) Then
   ReDim Preserve Array1(1 To i): Array1(i) = txt1
  End If
End Function

Private Sub Timer1_Timer()
  If index < 31 Then
     TCount = TCount + 1
     If TCount < 31 Then
        Label1.Caption = Int(Rnd * 30) + 1
     Else
        Label1.Caption = b(index)
        index = index + 1
        Print b(index - 1);
        TCount = 0
        Timer1.Enabled = False
     End If
  Else
     MsgBox ("完成抽签")
     TCount = 0
     Timer1.Enabled = False
  End If
End Sub
附件: 您没有浏览附件的权限,请 登录注册

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2018-06-08 10:48
honey111
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-6-6
  得分:0 
回复 4楼 wufuzhang
非常感谢,写的非常好!

[此贴子已经被作者于2018-6-8 16:14编辑过]

2018-06-08 16:07
nhjsjjs
Rank: 1
等 级:新手上路
威 望:1
帖 子:7
专家分:0
注 册:2016-9-4
  得分:0 
这个程序的“条件语句”更简单一点:
Option Explicit
Dim hao As Integer, i As Integer

Private Sub Form_Load()
Dim m As Integer
For m = 1 To 30 '可以根据总人数修改
    List1.AddItem Trim(Str(m)) '控件List1要隐藏
Next m
End Sub

Private Sub Command1_Click()'抽奖
Dim sui As Integer, coun As Integer
i = 0
coun = List1.ListCount
If coun > 0 Then
    Randomize
    sui = Int((coun * Rnd))
    hao = Val(List1.List(sui))'抽出号码
    List1.RemoveItem sui '避免号码重复
    Timer1.Enabled = True
End If
End Sub

Private Sub Timer1_Timer() '设计时,Timer1..Enabled = False,Timer1.Interval=50
If i < hao Then
    i = i + 1
    Label1.Caption = Trim(Str(i))'滚动显示
Else
    Timer1.Enabled = False
End If
End Sub


[此贴子已经被作者于2018-7-8 20:42编辑过]

2018-07-08 11:42
nhjsjjs
Rank: 1
等 级:新手上路
威 望:1
帖 子:7
专家分:0
注 册:2016-9-4
  得分:0 
收回刚才的帖子

[此贴子已经被作者于2018-7-8 20:27编辑过]

2018-07-08 11:58
nhjsjjs
Rank: 1
等 级:新手上路
威 望:1
帖 子:7
专家分:0
注 册:2016-9-4
  得分:0 
收回刚才的帖子

[此贴子已经被作者于2018-7-8 20:28编辑过]

2018-07-08 12:04







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

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