gpt4 book ai didi

.net - RichTextbox - 行长选择问题

转载 作者:行者123 更新时间:2023-12-04 04:59:24 28 4
gpt4 key购买 nike

我正在编写一个小应用程序,我可以在其中加载文本文件以匹配正则表达式:

enter image description here

我根据匹配行的长度更改前景色文本,

问题是,如果一行是多行,那么它不会按预期工作并且只选择该行的一半,例如以“title”开头的第二行,这个:

Title   : Kirsty Maccoll - A New England: The Very Best of Kirsty Maccoll

你可以在这里看到问题:
enter image description here

但奇怪的是,如果我调整表单大小以让我看到整行,然后我重新键入 RegEx,然后它按预期工作并选择整行:
enter image description here

我不知道如何在不调整表单大小的情况下解决这个问题。

这是我用来更改前景色的代码:
Private Sub MatchRegEx()
Label_Matched_Value.Text = "0"
Label_Missed_Value.Text = "0"

If (TextBox_RegEx.Text = "" Or TextBox_RegEx.Text = TextBox_Hint) And RichTextBox_Strings.Text.Length = 0 Then
Label_Info.Text = ""
RichTextBox_Strings.Select(0, RichTextBox_Strings.Text.Length)
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
ElseIf (TextBox_RegEx.Text = "" Or TextBox_RegEx.Text = TextBox_Hint) And RichTextBox_Strings.Text.Length > 0 Then
Label_Info.Text = ""
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
Else
Try
Label_Info.Text = "Valid RegEx"
For i As Integer = 0 To RichTextBox_Strings.Lines.Length - 1
If System.Text.RegularExpressions.Regex.IsMatch(RichTextBox_Strings.Lines(i), RegEx) Then
If Not RichTextBox_Strings.Focused Then
RichTextBox_Strings.Select(RichTextBox_Strings.GetFirstCharIndexFromLine(i), RichTextBox_Strings.Lines(i).Length)
End If
RichTextBox_Strings.SelectionColor = Color.LimeGreen
Label_Matched_Value.Text = CInt(Label_Matched_Value.Text) + 1
Else
If Not RichTextBox_Strings.Focused Then
RichTextBox_Strings.Select(RichTextBox_Strings.GetFirstCharIndexFromLine(i), RichTextBox_Strings.Lines(i).Length)
End If
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
Label_Missed_Value.Text = CInt(Label_Missed_Value.Text) + 1
End If
Next
Catch ex As Exception
Label_Info.Text = "Invalid RegEx"
RichTextBox_Strings.SelectAll()
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
End Try
End If
End Sub

和示例文本:
Title   : The Upbeats - Primitive Technique
Genre : Drum & Bass
Year : 2013
Page : http://www.mp3crank.com/the-upbeats/primitive-technique.htm
Download: http://potload.com/zj0scbxjuw90



Title : Kirsty Maccoll - A New England: The Very Best of Kirsty Maccoll
Genre : Folk, Pop
Year : 2013
Page : http://www.mp3crank.com/kirsty-maccoll/a-new-england-the-very-best-of-kirsty-maccoll.htm
Download: http://potload.com/ziixpepo07lu



Title : Of Montreal - Young Froth / Taypiss
Genre : Indie, Pop
Year : 2013
Page : http://www.mp3crank.com/of-montreal/young-froth-taypiss.htm
Download: http://potload.com/hyc4okxucnlu

UPDATE:



我已经调试了问题并且值是正确的:
Line 0 - selected range: 43 length
Line 8 - selected range: 73 length
Line 16 - selected range: 45 length

是“标题”行的确切行数和长度(调整表单大小以查看整行时)。

UPDATE 2:



如果我将 Richtextbox 的 textfont 更改为像 5pt 这样的小字体(以默认表单大小显示整行),那么一切都按预期工作。

所以这个问题似乎是这样的,当整行显示为多行时,因为整行不适合表单的大小,那么它就像不止一行?

如何解决这个问题?

UPDATE 3:



如果想测试它,这是完整的来源......
Public Class Form1

#Region " Vars / Properties "

Dim TextBox_Hint As String = "Type your RegEx here..."
Dim MatchRegEx_Flag As Boolean = True

Public Property RegEx() As String
Get
Return TextBox_RegEx.Text
End Get
Set(ByVal value As String)
TextBox_RegEx.Text = value
End Set
End Property

#End Region

#Region " Controls "

' TextBox RegEx [Enter/Leave]
Private Sub TextBox_RegEx_Hint(sender As Object, e As EventArgs) Handles TextBox_RegEx.Enter, TextBox_RegEx.Leave
If sender.Text = TextBox_Hint Then
Label_Info.Text = ""
sender.text = ""
ElseIf sender.Text = "" Then
sender.text = TextBox_Hint
Label_Info.Text = ""
End If
End Sub

' TextBox RegEx [TextChanged]
Private Sub TextBox_RegEx_TextChanged(sender As Object, e As EventArgs) Handles TextBox_RegEx.TextChanged
If MatchRegEx_Flag Then
MatchRegEx_Flag = False
MatchRegEx()
MatchRegEx_Flag = True
End If

End Sub

' Button Copy RegEx [Click]
Private Sub Button_Copy_RegEx_Click(sender As Object, e As EventArgs) Handles Button_Copy_RegEx.Click
Clipboard.SetText(TextBox_RegEx.Text)
End Sub

' Button Copy Matches [Click]
Private Sub Button_Copy_Matches_Click(sender As Object, e As EventArgs) Handles Button_Copy_Matches.Click
Clipboard.SetText(" ")
For i As Integer = 0 To RichTextBox_Strings.Lines.Length - 1
If System.Text.RegularExpressions.Regex.IsMatch(RichTextBox_Strings.Lines(i), RegEx) Then
RichTextBox_Strings.Select(RichTextBox_Strings.GetFirstCharIndexFromLine(i), RichTextBox_Strings.Lines(i).Length)
Clipboard.SetText(Clipboard.GetText & vbNewLine & RichTextBox_Strings.SelectedText)
End If
Next
End Sub

' Button Load [ Click]
Private Sub Button_TextFile_Click(sender As Object, e As EventArgs) Handles Button_TextFile.Click
Dim Textfile As New OpenFileDialog()
Textfile.InitialDirectory = Environ("programfiles")
Textfile.Title = "Load a text from file..."
Textfile.Filter = "Text-files|*.txt"
If Textfile.ShowDialog() = DialogResult.OK Then
RichTextBox_Strings.SuspendLayout()
RichTextBox_Strings.Text = My.Computer.FileSystem.ReadAllText(Textfile.FileName)
RichTextBox_Strings.ResumeLayout()
End If
End Sub

' RichTextBox [MouseHover]
Private Sub RichTextBox_Strings_MouseHover(sender As Object, e As EventArgs) Handles RichTextBox_Strings.MouseHover
'sender.focus()
End Sub

' RichTextBox [TextChanged]
Private Sub RichTextBox_Strings_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox_Strings.TextChanged
If MatchRegEx_Flag Then
MatchRegEx_Flag = False
MatchRegEx()
MatchRegEx_Flag = True
End If
End Sub

#End Region

#Region " Procedures "

Private Sub MatchRegEx()
Label_Matched_Value.Text = "0"
Label_Missed_Value.Text = "0"
If (TextBox_RegEx.Text = "" Or TextBox_RegEx.Text = TextBox_Hint) And RichTextBox_Strings.Text.Length = 0 Then
Label_Info.Text = ""
RichTextBox_Strings.Select(0, RichTextBox_Strings.Text.Length)
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
ElseIf (TextBox_RegEx.Text = "" Or TextBox_RegEx.Text = TextBox_Hint) And RichTextBox_Strings.Text.Length > 0 Then
Label_Info.Text = ""
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
Else
Try
Label_Info.Text = "Valid RegEx"
For i As Integer = 0 To RichTextBox_Strings.Lines.Length - 1
If System.Text.RegularExpressions.Regex.IsMatch(RichTextBox_Strings.Lines(i), RegEx) Then
If Not RichTextBox_Strings.Focused Then
RichTextBox_Strings.Select(RichTextBox_Strings.GetFirstCharIndexFromLine(i), RichTextBox_Strings.Lines(i).Length)
End If
RichTextBox_Strings.SelectionColor = Color.LimeGreen
Label_Matched_Value.Text = CInt(Label_Matched_Value.Text) + 1
Else
If Not RichTextBox_Strings.Focused Then
RichTextBox_Strings.Select(RichTextBox_Strings.GetFirstCharIndexFromLine(i), RichTextBox_Strings.Lines(i).Length)
End If
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
'MsgBox(RichTextBox_Strings.Lines(i))
Label_Missed_Value.Text = CInt(Label_Missed_Value.Text) + 1
End If
Next
Catch ex As Exception
' MsgBox(ex.Message)
Label_Info.Text = "Invalid RegEx"
RichTextBox_Strings.SelectAll()
RichTextBox_Strings.SelectionColor = Color.FromArgb(248, 248, 242)
End Try
End If
End Sub

#End Region

End Class

最佳答案

我以前也遇到这个问题吗?禁用 wordwrap富文本框的属性可能会解决您的问题:)

关于.net - RichTextbox - 行长选择问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16331129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com