)
We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. (Last updated on: June 24, 2019).
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

How to use hyperlink functionality in the WinForms TextBoxExt?

Platform: WinForms |
Control: TextBoxExt |
Published Date: October 28, 2015 |
Last Revised Date: February 3, 2020

Hyperlink support

You can provide hyperlink support to the TextBoxExt 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

2X faster development

The ultimate WinForms UI toolkit to boost your development speed.
ADD COMMENT
You must log in to leave a comment

Please sign in to access our KB

This page will automatically be redirected to the sign-in page in 10 seconds.

Up arrow icon

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile
Live Chat Icon