如何在 Visual Basic 2012 中突出显示 Hashtag

Posted

技术标签:

【中文标题】如何在 Visual Basic 2012 中突出显示 Hashtag【英文标题】:How to make Hashtag highlighting in visual basic 2012 【发布时间】:2017-08-31 04:50:54 【问题描述】:

当键入“#”后跟任何字符时,我想突出显示文本框中的文本,就像 Facebook 所做的那样。我尝试使用 SelectionStart 、SelectionLength 和 SelectionBackColor 属性,但我遇到了很多问题。

我需要帮助,处理正在输入的字符的最佳事件是什么?我使用了 TextChanged 事件,但它不起作用。是否还有其他属性而不是 SelectionStart 和 SelectionLength?

请给我提示,我会搜索。 我搜索了很多,但没有找到有用的主题。

【问题讨论】:

您是在 Excel 中执行此操作吗? vba vb.net。 vba 适用于 Excel、word、Access,... vb.net 在视觉工作室中。 @ScottCraner 哦,对不起,Visual Studio 中没有它的 vb.net。你知道怎么做吗? 不,但现在我修复了标签,您将从知道的人那里获得更好的帮助。我会添加您尝试过的任何代码。 这将检测为用户类型。 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles TextBox1.TextChanged System.Diagnostics.Debug.WriteLine("TextBox1.Text = " & TextBox1.Text) End Sub 【参考方案1】:

不幸的是,我认为 vb.net 没有办法做到这一点,因为它需要回发到服务器才能运行。为了让它在用户键入时突出显示文本,您需要一个前端脚本来运行。

这是一个可能有用的链接:https://forums.asp.net/t/1597892.aspx?Highlight+text+in+a+textbox

【讨论】:

【参考方案2】:

我做到了! 它的工作:) ... 此代码检测用户输入的主题标签并将其着色为绿色,当字符数超过 140 时,它开始用红色突出显示它们。 我使用 KeyPress 事件而不是 textChanged。

Public Class Form1
Dim previous As Char = " "
Dim indexOfHash As Integer = -1
Dim extraChar As Integer = 0
Private Const charLimit As Integer = 140 ' maximum char allowed in the textbox
Private Sub RichTextBox_keyPressed(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles RichTextBox.KeyPress
        Try

            Dim remainingCharCount As Integer
            Dim textBoxLength As Integer = RichTextBox.TextLength

            ' if input is BACKSPACE
            If (Not String.IsNullOrEmpty(e.KeyChar) AndAlso Asc(e.KeyChar) = 8) Then
                remainingCharCount += 1
            End If
            remainingCharCount = charLimit - RichTextBox.TextLength
            charRemainingLabel.Text = remainingCharCount & " Characters Left"
            If remainingCharCount < 0 Then
                extraChar += 1
                Dim temp As Integer = RichTextBox.SelectionStart
                RichTextBox.SelectionStart = RichTextBox.TextLength
                RichTextBox.SelectionLength = remainingCharCount * -1
                RichTextBox.SelectionBackColor = Color.LightCoral
                RichTextBox.SelectionColor = Color.Black
                charRemainingLabel.Text = String.Empty
                charMinusLabel.Text = remainingCharCount & " Characters"
                RichTextBox.SelectionStart = temp
            ElseIf remainingCharCount >= 0 AndAlso extraChar > 0 Then
                Dim temp As Integer = RichTextBox.SelectionStart
                RichTextBox.SelectionStart = RichTextBox.TextLength
                RichTextBox.SelectionLength = extraChar
                RichTextBox.SelectionBackColor = Color.Transparent
                RichTextBox.SelectionColor = Color.Black
                RichTextBox.SelectionStart = temp
                extraChar = 0
            End If

            Dim input As Char = e.KeyChar
            Dim inputAsInteger As Integer = Asc(e.KeyChar)
            previous = RichTextBox.GetCharFromPosition(RichTextBox.GetPositionFromCharIndex(RichTextBox.TextLength))

            ' if Hash and preceeded with SPACE or ENTER
            If (Not String.IsNullOrEmpty(input) AndAlso input = "#" AndAlso (previous = " " Or String.IsNullOrEmpty(previous) Or previous = vbLf Or Asc(previous) = 13 Or RichTextBox.TextLength = 0)) Then
                indexOfHash = RichTextBox.TextLength
            End If

            ' if Hash exists STOP when find SPACE or ENTER 
            If indexOfHash <> -1 AndAlso (input = " " Or String.IsNullOrEmpty(input) Or Asc(input) = 13 Or input = vbLf) AndAlso (RichTextBox.TextLength - indexOfHash) > 1 Then
                RichTextBox.SelectionStart = indexOfHash
                RichTextBox.SelectionLength = RichTextBox.TextLength - indexOfHash
                RichTextBox.SelectionColor = Color.Green
                RichTextBox.SelectionStart = RichTextBox.TextLength
                'RichTextBox.DeselectAll()
                RichTextBox.SelectionColor = Color.Black
                indexOfHash = -1 ' end of HashTag 
            End If

            ' if input is BACKSPACE
            If (Not String.IsNullOrEmpty(input) AndAlso Asc(input) = 8 AndAlso (previous = "#")) Then
                indexOfHash = RichTextBox.TextLength - 1
                remainingCharCount += 1
            End If

        Catch ex As Exception

        End Try
    End Sub
end class

【讨论】:

以上是关于如何在 Visual Basic 2012 中突出显示 Hashtag的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Basic 中执行另存为 (V11 2012)

如何在Visual Basic 2012中使用mdb数据库中的数据填充列表框?

如何在 Visual Basic .NET 中找到默认音频设备?

如何在 Visual Basic 2010 中使用 sqlite db?

如何让 Visual Studio 2010 突出显示变量的实例

如何从原始 URL Visual Basic .NET 中获取重定向的 URL