Click here to Skip to main content
15,881,172 members
Articles / Operating Systems / Windows
Article

Smart-Tag Control Designer (Extending Design-Time Support)

Rate me:
Please Sign up or sign in to vote.
4.65/5 (21 votes)
22 Jan 2007CPOL2 min read 70.3K   930   82   18
Helps developers to build customized design-time extensions for components and controls through Smart Tag designer panels.

Introduction

This article provides a base class that helps developers build customized design-time extensions for components and controls through Smart Tag designer panels.

How to Use this Helper (Base) Class

You can easily define your custom Smart Tag panels containing your action list items (Properties, Methods (Verbs), and Texts). Here is a sample control which derives from the TextBox control and uses a custom designer (mySmartTagActionList). The items are added in the AddActionItems() method. Any property or method you want to add should be defined in your SmartTagActionList class which is derived from the SmartTagActionListBase class.

Here are the required steps to create your custom control designer:

  • Define your control (or component) class (e.g., XTextBox)
  • Define a DesignerActionList class which inherits from SmartTagActionListBase. This part of the code should also be inserted to its body:
  • VB
    Public Class mySmartTagActionList1
        Inherits SmartTagActionListBase
    
        'this variable is used to cache a reference 
        'to the associated control in this class
    
        Private m_Control As XTextBox 
    
        Sub New(ByVal component As IComponent)
            MyBase.New(component)
            'Me.AutoShow = True
            'AutoExpand this designer whenever user drag it to the Form
    
            m_Control = CType(component, XTextBox)
            'cache the control assciated to this designer
    
        End Sub
    End Class

    where XTextBox is the type (or class name) of your control. Here, the m_Control variable is used to cache a reference to the associated control of this designer for later uses.

    You may also use Me.AutoShow = True in this constructor routine to auto-expand (auto-show) it whenever the user drags your control into the form.

  • Define the properties/methods you want (e.g., BackColor, ForeColor, and IsMultiline, in the below sample). Some properties are already defined in the base class (SmartTagActionListBase) such as: Name, Text, Font, RightToLeft.
  • Override the AddActionItems() method to add your Smart Tag panel items (ActionList items). You may use the AddActionProperty, AddActionMethod, AddActionHeader, and AddActionText methods to do this easily (see the sample code).
  • Add a Designer attribute to your control class like this:
  • VB
    <Designer(GetType(SmartTagControlDesigner(Of mySmartTagActionList)))>

    where the mySmartTagActionList is the name of your SmartTagActionList class.

    Note: if you want to define a designer for a component (not a control), just use SmartTagComponentDesigner instead of SmartTagControlDesigner:

    VB
    <Designer(GetType(SmartTagComponentDesigner(Of mySmartTagActionList)))<

The Sample Code

Here is a sample control which uses a custom SmartTagPanel Designer:

VB
Imports System.ComponentModel

<Designer(GetType(SmartTagControlDesigner(Of mySmartTagActionList)))> _
Public Class XTextBox
    Inherits TextBox

    '... customizations


End Class

Public Class mySmartTagActionList
    Inherits SmartTagActionListBase

    Private m_Control As XTextBox

    Sub New(ByVal component As IComponent)
        MyBase.New(component)
        m_Control = CType(component, XTextBox)
    End Sub

    Public Property BackColor() As Color
        Get
            Return m_Control.BackColor
        End Get
        Set(ByVal value As Color)
            Me.SetPropertyByName(m_Control, "BackColor", value)
        End Set
    End Property

    Public Property ForeColor() As Color
        Get
            Return m_Control.ForeColor
        End Get
        Set(ByVal value As Color)
            Me.SetPropertyByName(m_Control, "ForeColor", value)
        End Set
    End Property

    Public Property IsMultiline() As Boolean
        Get
            Return m_Control.Multiline
        End Get
        Set(ByVal value As Boolean)
            Me.SetPropertyByName(m_Control, "Multiline", value)
        End Set
    End Property

    Public Sub SwapColors()
        Dim c As Color = Me.ForeColor
        Me.ForeColor = Me.BackColor
        Me.BackColor = c
        RefreshDesigner()
    End Sub

    Public Overrides Sub AddActionItems()
        'These properties are already defined 
        'in base (SmartTagActionListBase) class:

        '  => Name, Text, Font, RightToLeft

        'Other properties/Methods should be defined in current class

        AddActionHeader("Main")
        AddActionProperty("Name", "Name:", "Main", "")
        AddActionProperty("Text", "Text:", "Main", "")
        AddActionProperty("Font", "Font:", "Main", "")
        AddActionProperty("IsMultiline", "Multiline:", "", "")
        AddActionHeader("Colors")
        AddActionProperty("ForeColor", "ForeColor:", _
                          "Colors", "Sets the ForeColor")
        AddActionProperty("BackColor", "BackColor:", _
                          "Colors", "Sets the BackColor")
        AddActionText("This is my info...", "Colors")
        AddActionMethod("SwapColors", "Swap Colors", _
                        "Colors", "Swap ForeColor/BackColor", True)
    End Sub

End Class

Notes

You may see this article: Creating Property Editors in Design Time for VS.NET Easily (UITypeEditor Helper), to create UITypeEditor's easily. An 'Editor' is related to a property, but a 'Designer' is related to a control or component (a class)! By means of UITypeEditors, you can provide a custom editor window (e.g., a dropdown window) to edit each property of a control. You may mix both of the 'Designer' and 'Editor' attributes to achieve better design-time extensions for components and controls.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionDisappearing Smart-Tag [modified] Pin
aaroncampf13-Jan-11 16:22
aaroncampf13-Jan-11 16:22 
GeneralSmart Tag crashes with Swap Colors Pin
Derek Hart2-Mar-09 5:59
Derek Hart2-Mar-09 5:59 
QuestionWhere can I create my own error? Pin
Derek Hart2-Mar-09 5:56
Derek Hart2-Mar-09 5:56 
General'SmartMoveTag' from Panel Inhereted control disapears. Pin
magiel_van_gaalen7-Sep-08 23:23
magiel_van_gaalen7-Sep-08 23:23 
AnswerRe: 'SmartMoveTag' from Panel Inhereted control disapears. Pin
Scott Rippey26-Nov-08 12:57
Scott Rippey26-Nov-08 12:57 
GeneralC# Pin
sabrown10018-Oct-07 10:53
sabrown10018-Oct-07 10:53 
QuestionCreate composite controls Pin
bmwgamil9-Aug-07 13:09
bmwgamil9-Aug-07 13:09 
QuestionHow to add smart tag to Custom Control inherited from ComboBox Pin
Kristipati Subramanyam3-Aug-07 19:04
Kristipati Subramanyam3-Aug-07 19:04 
GeneralCustom UITypeEditor on ActionList Pin
DevDiver22-Jan-07 5:26
DevDiver22-Jan-07 5:26 
GeneralRe: Custom UITypeEditor on ActionList Pin
S.Serpooshan22-Jan-07 6:27
S.Serpooshan22-Jan-07 6:27 
GeneralRe: Custom UITypeEditor on ActionList Pin
DevDiver22-Jan-07 6:55
DevDiver22-Jan-07 6:55 
GeneralAutoExpand Pin
Henrique Carvalho21-Jan-07 22:36
Henrique Carvalho21-Jan-07 22:36 
GeneralRe: AutoExpand [modified] Pin
S.Serpooshan22-Jan-07 4:06
S.Serpooshan22-Jan-07 4:06 
GeneralRe: AutoExpand Pin
Henrique Carvalho22-Jan-07 5:09
Henrique Carvalho22-Jan-07 5:09 
GeneralThank you Pin
babakzawari18-Jan-07 20:31
babakzawari18-Jan-07 20:31 
GeneralRe: Thank you Pin
S.Serpooshan19-Jan-07 6:00
S.Serpooshan19-Jan-07 6:00 
Generalsolved Pin
Saadz14-Jan-07 10:56
Saadz14-Jan-07 10:56 
Generalhelps me alot, thanks Pin
ahmed4513-Jan-07 1:19
ahmed4513-Jan-07 1:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.