Introduction
This is a simple and fully functional clone of the standard Windows Notepad. The article describes about the functions used in Notepad and tells the logic to write the code. Code is also provided
Background
Notepad basically has File, Edit, Format, View and Help.
I have recreated the menus File, Edit, Format and Help. I have excluded View menu because I think a simple notepad Application doesn't require any status bar. If you think you need a status bar, I've also provided the code for it.
Using the code
File Menu
New - If the document is modified then a Message Box with the buttons Yes and No is displayed asking whether it should be saved or not. Code is :
If doc.Modified = True Then
Dim x As Integer = MsgBox("Do you want to save the modified document ?", MsgBoxStyle.YesNo)
If x = vbYes Then
SaveToolStripMenuItem.PerformClick()
Else
Me.Text = "Untitled - Notepad.NET"
doc.Clear()
End If
Me.Text = "Untitled - Notepad.NET"
doc.Clear()
End If
Open - File is opened and Notepad.NET uses Rijndael encryption - HEX is encoding type. I have took a Cryptography class from this site called "Crypto.vb". I have implemented this to decrypt the data in the TextBox doc.
Save - File is saved using the same encryption algorithm.
And
A PageSetupDialog is also used.
Edit menu has the standard Cut, Copy, Paste, Undo etc.
When it came to the part of Find, Find Next and Replace, It was a big confusion and there was a difficulty doing it. But I turned up successfully with it.
Logic and Code of both Find and Replace
First I created a function called FindText with a dependency on the start_pos (declared as Integer). This is the starting position. Then I declared two private variables - target_pos (integer for determining the target's position) and target (declared as string).
Then I declared pos as integer
Pos is assigned to the function InStr that determines the position of the text.
So if pos is above 0 then text is found. So to select text, target_pos is assigned to ps.
The selection was a quite a difficulty for me.
The textbox's SelectionStart property determines the starting position. So it is target_pos minus 1. The selection goes up to the end. So the SelectionLength property is set to
Len(target)-(Len(target)-Len(target))
If its not found , Clear the target variable and display message that text is not found.
Ain't it easy ???
The code I came up with is :
The code is as following
Private Sub FindText(ByVal start_pos as integer)
Dim pos As Integer
pos = InStr(start_pos, doc.Text.ToLower, tf.Text.ToLower)
If pos > 0 Then
target_pos = pos
doc.SelectionStart = target_pos - 1
doc.SelectionLength = Len(target) - (Len(target) - Len(target))
Else
MsgBox("Text Not Found")
target = ""
End If
End Sub
target = InputBox("Enter Word to find")
FindText(1)
If doc.SelectedText <> target Then
Else
x = InputBox(String.Format("Selected text is : {0}. Enter text to replace", target))
doc.SelectedText = x
End If
The above is the code for Replace.
Word Wrap is a default property of the textbox.
Code for FindNext is also simple
Just add 1 to target_pos.
So code will be
FindText(target_pos + 1)
Font can be changed by declaring a new FontDialog, assigning the selected font to the textbox font and textbox fontstyle to the dialog's selected style.
Thats All.
Simple isn't it ?
If you think new functions can be added, please comment so I will receive a notification and respond as soon as possible.
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-2980480-6");
pageTracker._initData();
pageTracker._trackPageview();
</script>