Click here to Skip to main content
15,886,519 members
Articles / Desktop Programming / Windows Forms

i00 Spell Check and Control Extensions - No Third Party Components Required!

Rate me:
Please Sign up or sign in to vote.
4.95/5 (117 votes)
11 Jan 2014Ms-PL16 min read 1.3M   22   266  
Simple to use, open source Spell Checker for .NET
'i00 .Net Spell Check
'©i00 Productions All rights reserved
'Created by Kris Bennett
'----------------------------------------------------------------------------------------------------
'All property in this file is and remains the property of i00 Productions, regardless of its usage,
'unless stated otherwise in writing from i00 Productions.
'
'Anyone wishing to use this code in their projects may do so, however are required to leave a post on
'VBForums (under: http://www.vbforums.com/showthread.php?p=4075093) stating that they are doing so.
'A simple "I am using i00 Spell check in my project" will surffice.
'
'i00 is not and shall not be held accountable for any damages directly or indirectly caused by the
'use or miss-use of this product.  This product is only a component and thus is intended to be used 
'as part of other software, it is not a complete software package, thus i00 Productions is not 
'responsible for any legal ramifications that software using this product breaches.

Partial Class SpellCheckTextBox

#Region "Actual Menu"

#Region "Menu Item Events"

    Private Sub SpellMenuItems_WordAdded(ByVal sender As Object, ByVal e As Menu.AddSpellItemsToMenu.SpellItemEventArgs) Handles SpellMenuItems.WordAdded
        Try
            DictionaryAddWord(e.Word)
        Catch ex As Exception
            MsgBox("The following error occured adding """ & e.Word & """ to the dictionary:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
        End Try
    End Sub

    Private Sub SpellMenuItems_WordChanged(ByVal sender As Object, ByVal e As Menu.AddSpellItemsToMenu.SpellItemEventArgs) Handles SpellMenuItems.WordChanged
        'lock window from updating
        extTextBoxCommon.LockWindowUpdate(parentTextBox.Handle)
        parentTextBox.SuspendLayout()

        'If parentRichTextBox IsNot Nothing Then
        '    'rich text box :(... use alternate method ... this will ensure that the formatting isn't lost
        '    parentRichTextBox.Select(extTextBoxContextMenu.LastMenuSpellClickReturn.WordStart, extTextBoxContextMenu.LastMenuSpellClickReturn.Word.Length)
        '    parentRichTextBox.SelectedText = e.Word
        'Else
        '    'standard text box .. can just replace all of the text

        '    'Get old scroll bar position
        '    Dim OldVertPos = extTextBoxCommon.GetScrollBarLocation(parentTextBox)

        '    'replace the text
        '    parentTextBox.Text = Left(parentTextBox.Text, extTextBoxContextMenu.LastMenuSpellClickReturn.WordStart) & _
        '                         e.Word & _
        '                         Right(parentTextBox.Text, Len(parentTextBox.Text) - extTextBoxContextMenu.LastMenuSpellClickReturn.WordEnd)

        '    'Set scroll bars to what they were
        '    extTextBoxCommon.SetScrollBarLocation(parentTextBox, OldVertPos) ' set Vscroll to last saved pos.
        'End If

        parentTextBox.Select(extTextBoxContextMenu.LastMenuSpellClickReturn.WordStart, extTextBoxContextMenu.LastMenuSpellClickReturn.Word.Length)
        parentTextBox.SelectedText = e.Word

        '... and select the replaced text
        parentTextBox.SelectionStart = extTextBoxContextMenu.LastMenuSpellClickReturn.WordStart
        parentTextBox.SelectionLength = Len(e.Word)

        'unlock window updates
        parentTextBox.ResumeLayout()
        extTextBoxCommon.LockWindowUpdate(IntPtr.Zero)
    End Sub

    Private Sub SpellMenuItems_WordUnIgnored(ByVal sender As Object, ByVal e As Menu.AddSpellItemsToMenu.SpellItemEventArgs) Handles SpellMenuItems.WordUnIgnored
        Try
            DictionaryUnIgnoreWord(e.Word)
        Catch ex As Exception
            MsgBox("The following error ignoring """ & e.Word & """:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
        End Try
    End Sub

    Private Sub SpellMenuItems_WordIgnored(ByVal sender As Object, ByVal e As Menu.AddSpellItemsToMenu.SpellItemEventArgs) Handles SpellMenuItems.WordIgnored
        Try
            DictionaryIgnoreWord(e.Word)
        Catch ex As Exception
            MsgBox("The following error ignoring """ & e.Word & """:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
        End Try
    End Sub

    Private Sub SpellMenuItems_WordRemoved(ByVal sender As Object, ByVal e As Menu.AddSpellItemsToMenu.SpellItemEventArgs) Handles SpellMenuItems.WordRemoved
        Try
            DictionaryRemoveWord(e.Word)
        Catch ex As Exception
            MsgBox("The following error occured removing """ & e.Word & """ from the dictionary:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
        End Try
    End Sub

#End Region

    Private Sub extTextBoxContextMenu_MenuOpening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles extTextBoxContextMenu.MenuOpening

        'If ContextMenuStrip.SourceControl Is parentTextBox Then
        'SpellMenuItems.RemoveSpellMenuItems()

        If OKToSpellCheck Then
            SpellMenuItems.ContextMenuStrip = extTextBoxContextMenu.ContextMenuStrip
            If Settings.IgnoreWordOverride(extTextBoxContextMenu.MenuSpellClickReturn.Word) Then
                'word is in caps etc...
            Else
                SpellMenuItems.AddItems(extTextBoxContextMenu.MenuSpellClickReturn.Word, CurrentDictionary, CurrentDefinitions, CurrentSynonyms, Settings)
            End If
        End If
        'Else
        ''no word clicked on
        'End If

    End Sub

    Private WithEvents SpellMenuItems As New Menu.AddSpellItemsToMenu()

    Private Sub extTextBoxContextMenu_MenuClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripDropDownClosedEventArgs) Handles extTextBoxContextMenu.MenuClosed
        SpellMenuItems.RemoveSpellMenuItems()
    End Sub

#End Region

End Class

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)


Written By
i00
Software Developer (Senior) i00 Productions
Australia Australia
I hope you enjoy my code. It's yours to use for free, but if you do wish to say thank you then a donation is always appreciated.
You can donate here.

Comments and Discussions