RichTextBox Editor for various purposes with row numbering and searching.
In this page I'll describe a small form for text edition using RichTextBox. This form usually I call in MDI-application as part of any another my program, therefor this form has external control (Sub EditNewFile) for loading text and (Sub Search) for searching text. You can use this form as independently, but it need to add two button in toolbar calling EditNewFile and Search.
This is name of controls in this form:
And this is full code of form.
1: Imports System.ComponentModel
2: Imports System.Net
3: Imports System.Text.RegularExpressions
4: Imports RichTextBoxExt
5:
6: Public Class EditForm
7:
8: Dim HtmlTxt1 As String
9: Dim WorkingFileName As String
10: Dim WithEvents BGW1 As BackgroundWorker
11: Dim BGW1_Prm As New Object
12:
13:
14: Public Sub EditNewFile(FileName As String)
15: WorkingFileName = FileName
16: BGW1 = New BackgroundWorker
17: BGW1_Prm = New With {FileName}
18: BGW1.RunWorkerAsync(BGW1_Prm)
19: End Sub
20:
21: Dim SelectedLines As List(Of Integer)
22: Public Sub Search(Txt As String)
23: SearchToolStripLabel.Text = Txt
24: Dim M As MatchCollection = Regex.Matches(HtmlTxt1, Txt)
25: SearchCountToolStripLabel.Text = M.Count
26: Dim Start1 As Integer = 0
27: SelectedLines = New List(Of Integer)
28: For I As Integer = 0 To M.Count - 1
29: Dim One As Match = M(I)
30: Start1 = RichTextBox1.Find(Txt, Start1, RichTextBoxFinds.None)
31: RichTextBox1.Select(Start1, Txt.Length)
32: RichTextBox1.SelectionColor = Color.Red
33: SelectedLines.Add(RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart))
34: RichTextBox1.DeselectAll()
35: Start1 += Txt.Length + 1
36: Next
37: End Sub
38:
39: Private Sub EditForm_Load(sender As Object, e As EventArgs) Handles Me.Load
40: SearchToolStripLabel.Text = ""
41: SearchCountToolStripLabel.Text = ""
42: End Sub
43:
44: Private Sub SaveToolStripButton_Click(sender As Object, e As EventArgs) Handles SaveToolStripButton.Click
45: My.Computer.FileSystem.WriteAllText(WorkingFileName, RichTextBox1.Text.Replace(vbLf, vbCrLf), False, System.Text.Encoding.UTF8)
46: RefreshToolStripButton_Click(Nothing, Nothing)
47: Text = "EditForm"
48: End Sub
49:
50: Private Sub BGW1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BGW1.DoWork
51: HtmlTxt1 = My.Computer.FileSystem.ReadAllText(e.Argument.FileName)
52: End Sub
53:
54: Private Sub BGW1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BGW1.RunWorkerCompleted
55: RichTextBox1.Text = HtmlTxt1
56: RichTextBox1.Select()
57: AddLineNumbers()
58: End Sub
59:
60: #Region "LineNumber"
61:
62: Public Sub AddLineNumbers()
63: Enumerate()
64: End Sub
65:
66:
67:
68: Sub Enumerate()
69: Dim pt As Point = New Point(0, 0)
70: Dim First_Index As Integer = RichTextBox1.GetCharIndexFromPosition(pt)
71: Dim First_Line As Integer = RichTextBox1.GetLineFromCharIndex(First_Index)
72: pt.X = ClientRectangle.Width
73: pt.Y = ClientRectangle.Height
74: Dim Last_Index As Integer = RichTextBox1.GetCharIndexFromPosition(pt)
75: Dim Last_Line As Integer = RichTextBox1.GetLineFromCharIndex(Last_Index)
76: If First_Line = 0 And Last_Line = 0 Then Exit Sub
77: For ShowLines As Integer = First_Line To Last_Line + 2
78: Dim IsPresent As Integer = 0
79: If SelectedLines Is Nothing Then
80: 'first load, still no searching
81: LineNumberTextBox.AppendColorText(ShowLines + 1 & vbCrLf, Color.Gray)
82: Else
83: IsPresent = SelectedLines.FirstOrDefault(Function(Z) Z = ShowLines)
84: If IsPresent > 0 Then
85: LineNumberTextBox.AppendColorText(ShowLines + 1 & vbCrLf, Color.Red)
86: Else
87: LineNumberTextBox.AppendColorText(ShowLines + 1 & vbCrLf, Color.Gray)
88: End If
89: End If
90: Next
91: RichTextBox1.Select()
92: LineNumberTextBox.DeselectAll()
93: End Sub
94:
95: Private Sub RichTextBox1_VScroll(sender As Object, e As EventArgs) Handles RichTextBox1.VScroll
96: LineNumberTextBox.Text = ""
97: AddLineNumbers()
98: LineNumberTextBox.Invalidate()
99: End Sub
100:
101: Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
102: If RichTextBox1.Text = "" Then
103: AddLineNumbers()
104: End If
105: Text &= "*"
106: End Sub
107:
108: Private Sub RichTextBox1_FontChanged(sender As Object, e As EventArgs) Handles RichTextBox1.FontChanged
109: RichTextBox1.Select()
110: AddLineNumbers()
111: End Sub
112:
113: Private Sub RichTextBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles RichTextBox1.MouseDown
114: RichTextBox1.Select()
115: LineNumberTextBox.DeselectAll()
116: End Sub
117:
118: Private Sub RichTextBox1_Resize(sender As Object, e As EventArgs) Handles RichTextBox1.Resize
119: AddLineNumbers()
120: End Sub
121:
122: Private Sub RichTextBox1_SelectionChanged(sender As Object, e As EventArgs) Handles RichTextBox1.SelectionChanged
123: Dim pt As Point = RichTextBox1.GetPositionFromCharIndex(RichTextBox1.SelectionStart)
124: If pt.X = 1 Then
125: AddLineNumbers()
126: End If
127: End Sub
128:
129: Private Sub RefreshToolStripButton_Click(sender As Object, e As EventArgs) Handles RefreshToolStripButton.Click
130: SearchToolStripLabel.Text = ""
131: SearchCountToolStripLabel.Text = ""
132: RichTextBox1.SelectAll()
133: RichTextBox1.SelectionColor = Color.Black
134: RichTextBox1.DeselectAll()
135: If SelectedLines IsNot Nothing Then SelectedLines.Clear()
136: End Sub
137:
138: Private Sub FTPToolStripButton_Click(sender As Object, e As EventArgs) Handles FTPToolStripButton.Click
139: Dim X = New WebClient()
140: X.Credentials = New NetworkCredential(My.MySettings.Default.FtpName, My.MySettings.Default.FtpPass)
141: Dim ServerPath = "ftp://" & My.MySettings.Default.FtpHost & WorkingFileName.Replace("E:\vb-net", "").Replace("\", "/")
142: X.UploadFile(ServerPath, WebRequestMethods.Ftp.UploadFile, WorkingFileName)
143: End Sub
144:
145: #End Region
146:
147: End Class
This is small additional extension function I used in this form.
1: Imports System.Runtime.CompilerServices
2:
3: Module RichTextBoxExt
4:
5: <Extension>
6: Public Sub AppendColorText(R As RichTextBox, Txt As String, C As Color)
7: Dim Start1 As Integer = R.TextLength
8: R.AppendText(Txt)
9: Dim End1 As Integer = R.TextLength
10: R.Select(Start1, End1 - Start1)
11: R.SelectionColor = C
12: End Sub
13:
14: End Module
Comments (
)
Link to this page:
//www.vb-net.com/RichTextBox/Index.htm
|