VB.
NET Notepad - Full Source Code and Features
Overview
This document includes a full-featured Notepad application built using VB.NET and Windows Forms. It
contains standard editing features and enhancements like Find/Replace, Dark Mode, Word Count, and more.
Form Design Requirements
- MenuStrip1
- TextBox1 (Multiline=True, Dock=Fill, ScrollBars=Both)
- StatusStrip1 with ToolStripStatusLabel1
Main Features Implemented
- File: New, Open, Save, Exit
- Edit: Undo, Redo, Cut, Copy, Paste, Select All, Find, Replace
- Format: Word Wrap, Font
- View: Dark Mode, Read Only
- Tools: Word Count
- Status Bar: Line and Column tracking
Imports System.IO
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = "Untitled - Notepad"
TextBox1.WordWrap = True
ToolStripStatusLabel1.Text = "Ln 1, Col 1"
' Load recent file
If Not String.IsNullOrEmpty(My.Settings.RecentFile) Then
Dim recent = My.Settings.RecentFile
If File.Exists(recent) Then
Dim result = MessageBox.Show("Open recent file: " & recent & "?", "Recent File",
MessageBoxButtons.YesNo)
If result = DialogResult.Yes Then
TextBox1.Text = File.ReadAllText(recent)
Me.Text = Path.GetFileName(recent) & " - Notepad"
End If
End If
End If
End Sub
' --- File Menu ---
Private Sub NewToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
NewToolStripMenuItem.Click
TextBox1.Clear()
Me.Text = "Untitled - Notepad"
End Sub
Private Sub OpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
OpenToolStripMenuItem.Click
Using ofd As New OpenFileDialog()
ofd.Filter = "Text Files|*.txt|All Files|*.*"
If ofd.ShowDialog() = DialogResult.OK Then
TextBox1.Text = File.ReadAllText(ofd.FileName)
Me.Text = Path.GetFileName(ofd.FileName) & " - Notepad"
My.Settings.RecentFile = ofd.FileName
My.Settings.Save()
End If
End Using
End Sub
Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
SaveToolStripMenuItem.Click
Using sfd As New SaveFileDialog()
sfd.Filter = "Text Files|*.txt|All Files|*.*"
If sfd.ShowDialog() = DialogResult.OK Then
File.WriteAllText(sfd.FileName, TextBox1.Text)
Me.Text = Path.GetFileName(sfd.FileName) & " - Notepad"
End If
End Using
End Sub
Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
ExitToolStripMenuItem.Click
Me.Close()
End Sub
' --- Edit Menu ---
Private Sub UndoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
UndoToolStripMenuItem.Click
TextBox1.Undo()
End Sub
Private Sub RedoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
RedoToolStripMenuItem.Click
TextBox1.Redo()
End Sub
Private Sub CutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
CutToolStripMenuItem.Click
TextBox1.Cut()
End Sub
Private Sub CopyToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
CopyToolStripMenuItem.Click
TextBox1.Copy()
End Sub
Private Sub PasteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
PasteToolStripMenuItem.Click
TextBox1.Paste()
End Sub
Private Sub SelectAllToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
SelectAllToolStripMenuItem.Click
TextBox1.SelectAll()
End Sub
Private Sub FindToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
FindToolStripMenuItem.Click
Dim findText As String = InputBox("Enter text to find:", "Find")
If Not String.IsNullOrEmpty(findText) Then
Dim index As Integer = TextBox1.Text.IndexOf(findText,
StringComparison.OrdinalIgnoreCase)
If index >= 0 Then
TextBox1.Select(index, findText.Length)
TextBox1.Focus()
Else
MessageBox.Show("Text not found.", "Find")
End If
End If
End Sub
Private Sub ReplaceToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
ReplaceToolStripMenuItem.Click
Dim findText As String = InputBox("Enter text to find:", "Replace")
If String.IsNullOrEmpty(findText) Then Exit Sub
Dim replaceText As String = InputBox("Enter replacement text:", "Replace")
TextBox1.Text = TextBox1.Text.Replace(findText, replaceText)
End Sub
' --- Format Menu ---
Private Sub WordWrapToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
WordWrapToolStripMenuItem.Click
TextBox1.WordWrap = Not TextBox1.WordWrap
WordWrapToolStripMenuItem.Checked = TextBox1.WordWrap
End Sub
Private Sub FontToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
FontToolStripMenuItem.Click
Using fontDlg As New FontDialog()
fontDlg.Font = TextBox1.Font
If fontDlg.ShowDialog() = DialogResult.OK Then
TextBox1.Font = fontDlg.Font
End If
End Using
End Sub
' --- View Menu ---
Private Sub DarkModeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
DarkModeToolStripMenuItem.Click
If DarkModeToolStripMenuItem.Checked Then
TextBox1.BackColor = Color.Black
TextBox1.ForeColor = Color.White
Else
TextBox1.BackColor = Color.White
TextBox1.ForeColor = Color.Black
End If
End Sub
Private Sub ReadOnlyToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
ReadOnlyToolStripMenuItem.Click
TextBox1.ReadOnly = ReadOnlyToolStripMenuItem.Checked
End Sub
' --- Tools Menu ---
Private Sub WordCountToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles
WordCountToolStripMenuItem.Click
Dim text = TextBox1.Text
Dim wordCount = text.Split(New Char() {" "c, vbLf, vbCr},
StringSplitOptions.RemoveEmptyEntries).Length
Dim charCount = text.Length
MessageBox.Show($"Words: {wordCount}{vbCrLf}Characters: {charCount}", "Count")
End Sub
' --- Status Bar ---
Private Sub UpdateStatusBar()
Dim line = TextBox1.GetLineFromCharIndex(TextBox1.SelectionStart)
Dim column = TextBox1.SelectionStart - TextBox1.GetFirstCharIndexOfCurrentLine()
ToolStripStatusLabel1.Text = $"Ln {line + 1}, Col {column + 1}"
End Sub
Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp
UpdateStatusBar()
End Sub
Private Sub TextBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseUp
UpdateStatusBar()
End Sub
End Class