Articles in this section
Category / Section

How to use hyperlink functionality in the WinForms TextBoxExt?

6 mins read

Hyperlink support

You can provide hyperlink support to the WinForms Textbox Ext by using the following steps.

1. Implement a custom control that is inherited from the TextBoxExt.

2. Add the LinkLabel control to the TextBoxExt control’s collection.

3. Then categorize and assign the hyperlink text value to the LinkLabel.

4. Start the navigation process upon link selection.

C#

//Sets the text.
this.linkTextBox1.Text = "http://www.google.com";
this.linkTextBox2.Text = "ftp.dlink.ru/pub/";
//Sets the link type.
this.linkTextBox1.LinkType = LinkTypes.Http;
this.linkTextBox2.LinkType = LinkTypes.Ftp;
/// <summary>
/// LinkTextBox extends TextBox with LinkType property that creates a clickable hyperlink when user is not editing the text.
/// </summary>
public class LinkTextBox : TextBoxExt
{
  //Initializes the variables.
  private LinkLabel llLinkLabel;
  //Sets the LinkType.
  private LinkTypes ltLinkType = LinkTypes.None;
   public LinkTextBox()
   {
       //Initializes the link label.
       llLinkLabel = new LinkLabel();
       this.Controls.Add(llLinkLabel);             
       llLinkLabel.AutoSize = true;
       llLinkLabel.LinkClicked += new LinkLabelLinkClickedEventHandler(ll_LinkClicked);
       llLinkLabel.Text = this.Text;      
   }
  public LinkTypes LinkType
  {
      get { return this.ltLinkType; }
      set
      { 
          this.ltLinkType = value; 
          if (value == LinkTypes.None)
              SwitchToEditMode(true);
          else
          {
              SwitchToEditMode(false);
              FillLinkData();
          }
      }
   }
   protected override void OnGotFocus(EventArgs e) 
   {
     base.OnGotFocus(e);
     //When control gets focus and active LinkType switches to edit mode.
     if (ltLinkType != LinkTypes.None)
         this.SwitchToEditMode(true);
   }
   protected override void OnLostFocus(System.EventArgs e)
   {      
     base.OnLostFocus(e);
     //When control gets focus and active LinkType switches to edit mode.
    if (ltLinkType != LinkTypes.None)
         this.SwitchToEditMode(false);
   }
   protected override void OnTextChanged(EventArgs e)
   {
     base.OnTextChanged (e);
     //When TextBox's Text changes, copies that data to LinkLabel.
     if (ltLinkType != LinkTypes.None)
         FillLinkData();
   }         
   /// <summary>
   /// Switches to edit mode or to clickable mode.
   /// </summary>
   /// <param name="_bEditMode">Edit mode = true, Clickable mode = false</param>
   protected void SwitchToEditMode(bool _bEditMode)
   {      
     //Edit mode means that LinkLabel is not visible.
     llLinkLabel.Visible = !_bEditMode;      
   }
   /// <summary>
   /// Copies information from TextBox to LinkLabel.
   /// </summary>
   private void FillLinkData()
   {
     //Copies the text.
     llLinkLabel.Text = this.Text;      
     //Figures out whether mailto: or http:// link is needed.
     string sLinkType = "";
     switch (ltLinkType)
     {
       case LinkTypes.Http: 
         if (this.Text.ToLower().IndexOf(@"http://") < 0 && this.Text.ToLower().IndexOf(@"https://") < 0)
          sLinkType = @"http://";
         break;
       case LinkTypes.Ftp:
         if (this.Text.ToLower().IndexOf(@"ftp://") < 0)
           sLinkType = @"ftp://";
         break;
       case LinkTypes.Email:
         if (this.Text.ToLower().IndexOf("mailto:") < 0)
           sLinkType = "mailto:";
         break;
      }
     //Clears old links and creates a new one.
     llLinkLabel.Links.Clear();
     llLinkLabel.Links.Add(0, llLinkLabel.Text.Length, sLinkType + this.Text);
   }
   /// <summary>
   /// Uses the hyperlink when user clicks on a LinkLabel.
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   private void ll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
   {
      if (ltLinkType != LinkTypes.None)
      {
          if (llLinkLabel.Links.Count > 0)
          {
              string sLink = llLinkLabel.Links[0].LinkData.ToString();
              System.Diagnostics.Process.Start(sLink);
          }
       }
   }
}
/// <summary>
/// Types of Hyperlinks that LinkTextBox supports.
/// </summary>
public enum LinkTypes
{
    None,     // used for regular TextBox
    Http,     // used for http:// or https:// hyperlink
    Ftp,      // used for ftp:// hyperlink
    Email     // used for mailto: hyperlink
}

 

VB

'Sets the text.
Me.linkTextBox1.Text = "http://www.google.com"
Me.linkTextBox2.Text = "ftp.dlink.ru/pub/"
'Sets the link type.
Me.linkTextBox1.LinkType = LinkTypes.Http
Me.linkTextBox2.LinkType = LinkTypes.Ftp
''' <summary>
''' LinkTextBox extends TextBox with LinkType property that creates a clickable hyperlink when user is not editing the text.
''' </summary>
Public Class LinkTextBox
  Inherits TextBoxExt
  'Initializes the variables.
  Private llLinkLabel As LinkLabel
  'Sets the LinkType.
  Private ltLinkType As LinkTypes = LinkTypes.None
  Public Sub New()
      'Initializes the link label.
      llLinkLabel = New LinkLabel()
      Me.Controls.Add(llLinkLabel)
      llLinkLabel.AutoSize = True
      AddHandler llLinkLabel.LinkClicked, AddressOf ll_LinkClicked
      llLinkLabel.Text = Me.Text
  End Sub
  Public Property LinkType() As LinkTypes
    Get
        Return Me.ltLinkType
    End Get
    Set(ByVal value As LinkTypes)
        Me.ltLinkType = value
        If value = LinkTypes.None Then
          SwitchToEditMode(True)
        Else
          SwitchToEditMode(False)
          FillLinkData()
        End If
    End Set
  End Property
  Protected Overrides Sub OnGotFocus(ByVal e As EventArgs)
     MyBase.OnGotFocus(e)
     'When control gets focus and active LinkType switches to edit mode.
     If ltLinkType <> LinkTypes.None Then
       Me.SwitchToEditMode(True)
     End If
  End Sub
  Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
     MyBase.OnLostFocus(e)
     'When control gets focus and active LinkType switches to clickable mode.
     If ltLinkType <> LinkTypes.None Then
        Me.SwitchToEditMode(False)
     End If
  End Sub
  Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
     MyBase.OnTextChanged(e)
     'When TextBox's Text changes, copies that data to LinkLabel.
     If ltLinkType <> LinkTypes.None Then
        FillLinkData()
     End If
  End Sub
  ''' <summary>
  ''' Switches to edit mode or to clickable mode.
  ''' </summary>
  ''' <param name="_bEditMode">Edit mode = true, Clickable mode = false</param>
  Protected Sub SwitchToEditMode(ByVal _bEditMode As Boolean)
     'Edit mode means that LinkLabel is not visible.
     llLinkLabel.Visible = Not _bEditMode
  End Sub
  ''' <summary>
  ''' Copy information from TextBox to LinkLabel.
  ''' </summary>
  Private Sub FillLinkData()
     'Copies the text.
     llLinkLabel.Text = Me.Text
     'Figures out whether mailto: or http:// link is needed.
     Dim sLinkType As String = ""
     Select Case ltLinkType
     Case LinkTypes.Http
            If Me.Text.ToLower().IndexOf("http://") < 0 AndAlso Me.Text.ToLower().IndexOf("https://") < 0 Then
               sLinkType = "http://"
            End If
     Case LinkTypes.Ftp
            If Me.Text.ToLower().IndexOf("ftp://") < 0 Then
               sLinkType = "ftp://"
            End If
     Case LinkTypes.Email
            If Me.Text.ToLower().IndexOf("mailto:") < 0 Then
               sLinkType = "mailto:"
            End If
      End Select
     'Clears old links and creates a new one.
     llLinkLabel.Links.Clear()
     llLinkLabel.Links.Add(0, llLinkLabel.Text.Length, sLinkType & Me.Text)
   End Sub
   ''' <summary>
   ''' Use the hyperlink if user clicks on a LinkLabel.
   ''' </summary>
   ''' <param name="sender"></param>
   ''' <param name="e"></param>
   Private Sub ll_LinkClicked(ByVal sender As Object, ByVal e As LinkLabelLinkClickedEventArgs)
      If ltLinkType <> LinkTypes.None Then
         If llLinkLabel.Links.Count > 0 Then
           Dim sLink As String = llLinkLabel.Links(0).LinkData.ToString()
           System.Diagnostics.Process.Start(sLink)
         End If
      End If
   End Sub
End Class
''' <summary>
''' Types of hyperlinks that LinkTextBox support.
''' </summary>
Public Enum LinkTypes
    None ' used for regular TextBox
    Http ' used for http:// or https:// hyperlink
    Ftp ' used for ftp:// hyperlink
    Email ' used for mailto: hyperlink
End Enum

 

Link displayed in TextBoxExt

Figure 1: Link displayed in TextBoxExt

Samples:

C#: TextBoxExt_Link_C#

VB: TextBoxExt_Link_VB

 

Conclusion

I hope you enjoyed learning about how to use hyperlink functionality in the WinForms TextBoxExt.

You can refer to our WinForms TextBoxExt’s feature tour page to know about its other groundbreaking feature representations. You can also explore our WinForms TextBoxExt documentation to understand how to present and manipulate data.

For current customers, you can check out our WinForms components from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our WinForms TextBox and other WinForms components.

If you have any queries or require clarifications, please let us know in comments below. You can also contact us through our support forumsDirect-Trac, or feedback portal. We are always happy to assist you!

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments
Please sign in to leave a comment
Access denied
Access denied