用户输入字母然后按钮使用 VB 从字符串计算位置

User enters letter then button computes position from a string using VB

我正在使用 indexOf 但我无法弄清楚我在哪里犯了错误,因为输出给出了 -1.

我意识到我可以将整个语句段落复制到输出的最后一行,但我希望它可以直接从标签中提取出来。

Public Class Form1
  Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click
    Dim statement As String
    Dim letter As String
    statement = CStr(lblStatement.Text)
    letter = CStr(txtLetter.Text)
    txtOutput.Text = CStr(lblStatement.Text).IndexOf("letter")
    'txtOutput.Text = letter.ToUpper & " first occurs in position " & statement.IndexOf(statement) & "."
  End Sub
End Class

这是表格的图片:

更新:感谢@ADyson 和@Slugsie 花时间回复我的求助电话。正如@Slugsie 指出的那样,在我的屏幕截图中确实是小写字母。我现在正在研究如何让它在不区分大小写的情况下工作。

最终代码
Public Class Form1 Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click txtOutput.Text = lblStatement.Text.IndexOf((txtLetter.Text).ToUpper) End Sub End Class

.IndexOf("letter")

正在查找用户在文本中输入的数据中的文字 letter。在 VB.NET(和大多数其他编程语言)中,引号内的任何内容都被视为固定的文本字符串,按原样解释,而不是作为程序代码处理或处理。

要让它查找 letter 变量的内容(看起来像您想要的),只需删除引号:

.IndexOf(letter)

顺便说一句,您的整个代码可以大大减少 - 主要是 CStr 的使用是不必要的,因为文本框和标签的 Text 属性已经 return 一个字符串- 这意味着你不需要使用 CStr 转换它 - 而且因为你没有使用你声明的所有变量。

您可以更简洁地重写整个示例:

Public Class Form1
  Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click
    txtOutput.Text = lblStatement.Text.IndexOf(txtLetter.Text)
  End Sub
End Class