【问题标题】:Click and recognize part of text in textbox vb.net单击并识别文本框 vb.net 中的部分文本
【发布时间】:2022-01-14 19:08:26
【问题描述】:

我正在尝试制作一个使用文本框的程序,其中列出了可以单击的文本选项。

作为文本框示例:

[选择:]

因此用户可以例如单击(在文本上)<2> 以选择第二个选项或<3> 因此选择第三个选项。这个想法来自使用类似系统的AutoCAD 命令提示符。

我如何在 vb.net 代码中实现这样的功能(如果可能的话)?

【问题讨论】:

标签: string vb.net textbox mouseover


【解决方案1】:

试试这个:

Private Sub TextBox1_Click(sender As Object, e As EventArgs) Handles TextBox1.Click
    Dim SplitText As String() = TextBox1.Text.Split(CChar("<"), ">")
    Dim SelectedText As String = GetSelectedText()
    Dim Options As New List(Of String)

    If Not SelectedText = "" Then
        For i = 0 To SplitText.Length - 1
            If IsNumeric(SplitText(i)) Then
                Options.Add("<" & SplitText(i) & ">")
            End If
        Next
        For i = 0 To Options.Count - 1
            If SelectedText = Options(i) Then
                'Put your code here if it is the current option in the loop equals the selected option.
                'I added a messagebox just so you can see the current option.
                MessageBox.Show("You selected option: " & Options(i))
            End If
        Next
    End If
End Sub

Private Function GetSelectedText()
    Dim CursorPosition As Integer = TextBox1.SelectionStart
    Dim SelectedNumber As String = ""
    Dim NumberLength As Integer = 0

    If CursorPosition = 0 Or CursorPosition = TextBox1.Text.Length Then
        Return ""
    End If
    Do Until Mid(TextBox1.Text, CursorPosition - NumberLength, 1) = "<"
        NumberLength += 1
    Loop
    SelectedNumber = Mid(TextBox1.Text, CursorPosition - NumberLength, NumberLength + 1)
    NumberLength = 0
    CursorPosition += 1
    Do Until Mid(TextBox1.Text, CursorPosition + NumberLength, 1) = ">"
        NumberLength += 1
    Loop
    SelectedNumber &= Mid(TextBox1.Text, CursorPosition, NumberLength + 1)

    If IsNumeric(SelectedNumber.Remove(0, 1).Remove(SelectedNumber.Length - 2, 1)) Then
        Return SelectedNumber
    Else
        Return ""
    End If
End Function

我把它放在文本框点击事件中,它可以工作。我没有尝试将代码放在任何其他事件中。我假设文本框被命名为:TextBox1

【讨论】:

  • 这可行,但它要求我仍然先手动突出显示文本...我现在正在处理它
  • @LabRat,我已经更新了我的代码。现在,当您单击文本框时,它会找到您单击的数字,而不必选择它。
  • 这很好用,虽然我现在需要弄清楚这段代码是如何工作的,所以我不仅要复制和过去,还要理解它,尽管我最终会设法理解它:)
  • @LabRat 我修复了我发现的一个错误。我已经更新了我的代码。
【解决方案2】:

下面是一个简单的示例,展示了如何使用LinkLabel 构建“菜单”:

Public Class Form1

    Private menuItems() As String = {"cat", "dog", "fish"}

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim menu As String = "Selection: " & String.Join(", ", menuItems)
        LinkLabel1.Text = menu
        LinkLabel1.Links.Clear()
        For Each item In menuItems
            LinkLabel1.Links.Add(menu.IndexOf(item), item.Length)
        Next
    End Sub

    Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        Dim i As Integer = LinkLabel1.Links.IndexOf(e.Link)
        Label1.Text = menuItems(i)
    End Sub

End Class

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多