Let’s add Find, Find Next/Previous, Replace/Replace All, and Auto Save and make the WPF version of .NETpad functionally complete.
First up, Find.
Find
You may recall that I struggled with Find, Find Next, Find Previous, Replace, and Replace All when I was working on the original, Windows Forms version of .NETpad. Fortunately, a reader, Michael Lerch, bailed me out, and I was able to complete that project using his code.
Separate from this, I later adapted that VB code to C# for a Windows Forms/C# version of the application that I never documented here. And then I adapted it again, for this WPF version, which of course uses the custom Input Box we created in the last installment.
As before, Find, Find Next, Find Previous, Replace, and Replace All also require two global variables. So open MainWindow.xaml.cs and add the following at the bottom of our list of global variables at the top of the MainWindow definition.
string FindTextString = "";
int FindLastIndexFound = 0;
We also need two additional helper methods, so let’s add those to the bottom of the MainWindow definition:
private void FindTheText()
{
   if (FindLastIndexFound > -1)
       TextBox1.Select(FindLastIndexFound, FindTextString.Length);
   else
       MessageBox.Show(this, "Cannot find " + (char)34 + FindTextString + (char)34, Application.Current.MainWindow.GetType().Assembly.GetName().Name, MessageBoxButton.OK, MessageBoxImage.Information);
}
private void FindTextIndex(int FindFromIndex, bool FindPreviousIndex)
{
   string text = TextBox1.Text;
  Â
   if (FindPreviousIndex == false)
   {
       FindLastIndexFound = text.IndexOf(FindTextString, FindFromIndex);
       if (FindLastIndexFound == -1)
       {
           // If text is not found, try searching from the beginning
           FindLastIndexFound = text.IndexOf(FindTextString, 0);
       }
   }
   else
   {
       FindLastIndexFound = text.LastIndexOf(FindTextString, FindFromIndex);
       if (FindLastIndexFound == -1)
       {
           // If text is not found, try searching from the end
           FindLastIndexFound = text.LastIndexOf(FindTextString, text.Length - 1);
       }
   }
}
With that out of the way, we can work on Find itself. And yes, Find---like Find Next, Find Previous, Replace, and Replace All---will be implemented using a WPF command. So, we have a bit of work to do.
First, open MainWindow.xaml and locate the FindMenu tag. Then, add a Command property to it so that it looks like so:
<MenuItem Command="Find" Name="FindMenu" Header="_Find" />
Next, locate the Window.CommandBindings section and add the following command binding:
<CommandBinding Command="Find" Executed="FindCommand_Executed" />
Now, open MainWindow.xaml.cs and create an empty event handler for FindCommand_E...
With technology shaping our everyday lives, how could we not dig deeper?
Thurrott Premium delivers an honest and thorough perspective about the technologies we use and rely on everyday. Discover deeper content as a Premium member.