You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wordle游戏开发问题:点击按钮后在TextBox中显示字符

Wordle游戏:字母按钮填充TextBox网格实现方案

核心逻辑

需要跟踪当前待填充的TextBox位置,点击字母按钮时,将按钮的Caption赋值给对应位置的TextBox,然后自动切换到下一个待填充位置(按行优先顺序)。


方法一:手动绑定按钮事件(适合少量按钮)

步骤1:声明位置跟踪变量

在窗体模块顶部添加模块级变量,记录当前要填充的行列:

Private currentRow As Integer
Private currentCol As Integer

Private Sub Form_Load()
    ' 初始化位置为第一行第一列
    currentRow = 1
    currentCol = 1
End Sub

步骤2:按钮点击事件处理

每个字母按钮的点击事件调用统一的填充和位置更新逻辑:

Private Sub cmdbtnA_Click()
    FillCurrentTextBox Me.cmdbtnA.Caption
    MoveToNextPosition
End Sub

Private Sub cmdbtnB_Click()
    FillCurrentTextBox Me.cmdbtnB.Caption
    MoveToNextPosition
End Sub

' 更多字母按钮事件以此类推...

步骤3:辅助函数实现

添加两个辅助函数,分别负责填充TextBox和更新位置:

Private Sub FillCurrentTextBox(char As String)
    ' 根据当前行列拼接TextBox名称(需匹配你的控件命名规则,比如第一行第一列是tb11)
    Dim targetTextBoxName As String
    targetTextBoxName = "tb" & currentRow & currentCol
    
    ' 检查控件存在并赋值
    If Me.Controls.Exists(targetTextBoxName) Then
        Me.Controls(targetTextBoxName).Text = UCase(char) ' 统一转为大写,符合Wordle风格
    End If
End Sub

Private Sub MoveToNextPosition()
    currentCol = currentCol + 1
    ' 假设每行5个输入框(Wordle标准5字母)
    If currentCol > 5 Then
        currentCol = 1
        currentRow = currentRow + 1
        ' 限制最大行数为6(Wordle最多6次尝试)
        If currentRow > 6 Then
            currentRow = 6
            currentCol = 5 ' 停在最后一个输入框
        End If
    End If
End Sub

方法二:批量绑定事件(适合大量字母按钮)

用类模块统一处理所有字母按钮的点击事件,避免重复代码:

步骤1:创建字母按钮类模块

新建类模块,命名为LetterButton,添加以下代码:

Public WithEvents btn As CommandButton

Private Sub btn_Click()
    ' 调用窗体的填充和位置更新方法
    frmWordle.FillCurrentTextBox btn.Caption
    frmWordle.MoveToNextPosition
End Sub

步骤2:窗体模块批量绑定

在窗体模块顶部添加集合变量,加载时绑定所有字母按钮:

Private letterButtons As Collection
Private currentRow As Integer
Private currentCol As Integer

Private Sub Form_Load()
    currentRow = 1
    currentCol = 1
    Set letterButtons = New Collection
    
    ' 遍历所有按钮,批量绑定事件
    Dim ctl As Control
    Dim btnInstance As LetterButton
    For Each ctl In Me.Controls
        If TypeOf ctl Is CommandButton Then
            ' 筛选字母按钮(假设按钮名称以cmdbtn开头)
            If Left(ctl.Name, 6) = "cmdbtn" Then
                Set btnInstance = New LetterButton
                Set btnInstance.btn = ctl
                letterButtons.Add btnInstance
            End If
        End If
    Next ctl
End Sub

' 保留方法一中的FillCurrentTextBox和MoveToNextPosition函数
Private Sub FillCurrentTextBox(char As String)
    Dim targetTextBoxName As String
    targetTextBoxName = "tb" & currentRow & currentCol
    If Me.Controls.Exists(targetTextBoxName) Then
        Me.Controls(targetTextBoxName).Text = UCase(char)
    End If
End Sub

Private Sub MoveToNextPosition()
    currentCol = currentCol + 1
    If currentCol > 5 Then
        currentCol = 1
        currentRow = currentRow + 1
        If currentRow > 6 Then
            currentRow = 6
            currentCol = 5
        End If
    End If
End Sub

原代码失效的可能原因

  1. 控件命名不匹配:tb1是否确实对应第一行第一个TextBox?需确保命名规则和代码中的拼接逻辑一致。
  2. 未跟踪位置:直接赋值tb1.text = cmdbtn1.caption会每次覆盖同一个TextBox,无法实现依次填充。
  3. Caption格式问题:按钮的Caption可能包含空格、大小写不一致等,建议统一转为大写后赋值。

内容的提问来源于stack exchange,提问作者user22924278

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:45:02