注册 登录
编程论坛 VB6论坛

摇号程序(修改版)

godkong 发布于 2023-04-10 11:07, 1372 次点击
求VB程序,实现以下功能:
1、把一组要摇号的姓名放在一个1.TXT文档中,
2、读取1.TXT文件的姓名,点击按钮,随机排序,并加序号
3、根据TEXT的宽度和TEXT组件的字号大小,大概算出每行可以显示几个名字,然后设定每行显示这么多名字,然后全部1.TXT文件里的名字全部显示出来!
请问大神,这样的话程序怎么写?

[此贴子已经被作者于2023-4-10 11:09编辑过]

5 回复
#2
yuma2023-04-10 17:55
此问题丢给ChatGpt 3.5来回答,如下:

摇号程序(修改版)
求VB程序,实现以下功能:
1、把一组要摇号的姓名放在一个1.TXT文档中,
2、读取1.TXT文件的姓名,点击按钮,随机排序,并加序号
3、根据TEXT的宽度和TEXT组件的字号大小,大概算出每行可以显示几个名字,然后设定每行显示这么多名字,然后全部1.TXT文件里的名字全部显示出来!
请问大神,这样的话程序怎么写?

以下是一个简单的VB程序示例,可以完成你所需要的功能:


Private Sub btnLuckyDraw_Click()
    '读取1.txt文件中的姓名到数组中
    Dim nameArr() As String
    Dim fso As New Scripting.FileSystemObject
    Dim fileObj As Scripting.TextStream
   
    Set fileObj = fso.OpenTextFile("1.txt", ForReading)
    nameArr = Split(fileObj.ReadAll(), vbCrLf)
    fileObj.Close
   
    '随机排序并加序号
    Randomize
    Dim i As Long
    Dim temp As String
   
    For i = 0 To UBound(nameArr)
        temp = nameArr(i)
        j = Int(Rnd() * UBound(nameArr))
        nameArr(i) = nameArr(j)
        nameArr(j) = temp
        nameArr(i) = i + 1 & ". " & nameArr(i)
    Next i
   
    '计算每行可以显示的名字数量
    Dim textWidth As Single
    textWidth = TextWidth(nameArr(0))
    Dim maxCols As Long
    maxCols = Int(Me.Width / textWidth)
   
    '在TEXT组件中显示所有名字
    txtNames.Text = ""
    Dim row As Long
    row = 1
   
    For i = 0 To UBound(nameArr)
        If i Mod maxCols = 0 Then
            txtNames.Text = txtNames.Text & vbCrLf
            row = row + 1
        End If
        txtNames.Text = txtNames.Text & nameArr(i) & " "
    Next i
   
End Sub

注:上述程序依赖于"Microsoft Scripting Runtime"的库,请确保你的电脑中已经安装了该库。
#3
godkong2023-04-12 10:58
回复 2楼 yuma
谢谢,导出时候有这个提示,是否意味着没有你说的RUNTIME库?
只有本站会员才能查看附件,请 登录
#4
风吹过b2023-04-12 13:01
方法1
工程,引用
按2楼最后的提示去找名字进行引用。
如果电脑里不存在该对象,会找不到,不过你这个工程里是不会出现这种情况。

方法2
使用CreateObject方法来创建
dim fso as object    '申明对象
Set fso=CreateObject(″Scripting.FileSystemObject″)   '创建对像,可以不引用,但需要电脑存在对象,否则报错。

自己写程序,建议 方法1 ,好处多多。
#5
东海ECS2023-04-15 11:43
以下是实现您所需功能的VB程序。请注意,代码中可能需要根据具体情况进行调整和修改。

程序代码:
Private Sub btnStart_Click()
    ' 读取1.TXT文件的姓名
    Dim strFileName As String
    Dim arrNames() As String
    Dim i As Integer
   
    strFileName = "1.TXT" ' 1.TXT文件路径
    Open strFileName For Input As #1
    Do While Not EOF(1)
        ReDim Preserve arrNames(i)
        Line Input #1, arrNames(i)
        i = i + 1
    Loop
    Close #1
   
    ' 随机排序,并加序号
    Dim j As Integer, k As Integer, temp As String
    For j = LBound(arrNames) To UBound(arrNames)
        k = Int(Rnd() * (UBound(arrNames) - j) + j)
        temp = arrNames(j)
        arrNames(j) = arrNames(k)
        arrNames(k) = temp
        arrNames(j) = j + 1 & "." & arrNames(j) ' 加序号
    Next j
   
    ' 显示随机排序后的姓名
    Dim intWidth As Integer, intFontSize As Integer
    intWidth = TextWidth("姓名") + 20 ' 每个TEXT组件的宽度
    intFontSize = 12 ' TEXT组件的字号大小
    Dim intCols As Integer, intRows As Integer, intIdx As Integer
    intCols = Int(Me.Width / intWidth) ' 每行可以显示的名字个数
    For i = LBound(arrNames) To UBound(arrNames)
        intIdx = i Mod intCols
        If intIdx = 0 Then intRows = intRows + 1
        With Me.Controls.Add("Forms.TextBox.1", "txtName" & i)
            .Top = 40 + intRows * (intFontSize + 5)
            .Left = 20 + intIdx * intWidth
            .Text = arrNames(i)
            .Width = intWidth - 10
            .Height = intFontSize + 5
            .Font.Size = intFontSize
        End With
    Next i
End Sub

您需要创建一个窗体,使用一个名为btnStart的按钮触发程序。在点击按钮时,程序会首先读取1.TXT文件中的姓名,然后进行随机排序,并为每个姓名加上序号。最后,程序根据TEXT的宽度和字号大小计算每行可以显示几个名字,自动布局在窗体上。



#6
you1578277152023-05-26 15:56
1