Click here to Skip to main content
15,897,226 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.4M   22   266  
Simple to use, open source Spell Checker for .NET
'i00 .Net Control Extensions
'©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.

<System.ComponentModel.DesignerCategory()> _
Public MustInherit Class ControlExtension
    Inherits NativeWindow
    Implements IMessageFilter

#Region "Update the WndProc Handle when the control gets a new handle - for when properties like RightToLeft are changed"

    Public Event ControlDisposed(ByVal sender As Object, ByRef e As EventArgs)
    Private Sub mc_Control_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles mc_Control.Disposed
        RaiseEvent ControlDisposed(sender, e)
        'remove the meesage filter...
        Application.RemoveMessageFilter(Me)
    End Sub

    Private Sub mc_Control_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles mc_Control.HandleCreated
        AssignHandle(Control.Handle)
    End Sub

#End Region

#Region "IMessageFilter"

    Public Class PreFilterMessageEventArgs
        Inherits EventArgs
        Public m As System.Windows.Forms.Message
        Public Cancel As Boolean
    End Class

    Public Event PreFilterMessage(ByVal sender As Object, ByRef e As PreFilterMessageEventArgs)
    Private Function ePreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
        Dim PreFilterMessageEventArgs As New PreFilterMessageEventArgs() With {.m = m}
        RaiseEvent PreFilterMessage(Me, PreFilterMessageEventArgs)
    End Function

#End Region

    Public Event Loaded(ByVal sender As Object, ByVal e As EventArgs)

    <System.ComponentModel.Description("Control Extensions that are required to be loaded prior to this ControlExtension")> _
    <System.ComponentModel.Browsable(False)> _
    <System.ComponentModel.DisplayName("Required Extensions")> _
    Public Overridable ReadOnly Property RequiredExtensions() As List(Of Type)
        Get
            Return Nothing
        End Get
    End Property

    <System.ComponentModel.Description("The type of control that will be automatically Extended by this class")> _
    <System.ComponentModel.Browsable(False)> _
    <System.ComponentModel.Category("Control")> _
    <System.ComponentModel.DisplayName("Control Type")> _
    Public MustOverride ReadOnly Property ControlTypes() As IEnumerable(Of Type)

    Private WithEvents mc_Control As Control
    <System.ComponentModel.Description("The Control associated with the ControlExtension object")> _
    <System.ComponentModel.Category("Control")> _
    <System.ComponentModel.DisplayName("Control")> _
    Public Overridable ReadOnly Property Control() As Control
        Get
            Return mc_Control
        End Get
    End Property

    Delegate Sub InstateHandle_cb()
    Private Sub InstateHandle()
        If Control.InvokeRequired Then
            Dim InstateHandle_cb As New InstateHandle_cb(AddressOf InstateHandle)
            Control.Invoke(InstateHandle_cb)
        Else
            If Control.IsHandleCreated = False Then
                Dim handle = Control.Handle
            Else
                AssignHandle(Control.Handle)
            End If
        End If
    End Sub

    Friend Sub DoLoad(ByVal control As Control)
        Me.mc_Control = control
    
        'AssignHandle allows the WndProc to be fired :)
        InstateHandle()

        'Try
        '    AssignHandle(Control.Handle)
        'Catch ex As Exception

        'End Try

        Application.AddMessageFilter(Me)
        Load()

        RaiseEvent Loaded(Me, EventArgs.Empty)

    End Sub

    MustOverride Sub Load()

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