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
原代码失效的可能原因
- 控件命名不匹配:
tb1是否确实对应第一行第一个TextBox?需确保命名规则和代码中的拼接逻辑一致。 - 未跟踪位置:直接赋值
tb1.text = cmdbtn1.caption会每次覆盖同一个TextBox,无法实现依次填充。 - Caption格式问题:按钮的Caption可能包含空格、大小写不一致等,建议统一转为大写后赋值。
内容的提问来源于stack exchange,提问作者user22924278
相关产品推荐
相关产品推荐

