Click here to Skip to main content
Click here to Skip to main content
Alternative Tip
Go to top

IntelliSense TextBox in C#

, 10 Mar 2014
Rate this:
Please Sign up or sign in to vote.
This is an alternative for "IntelliSense TextBox in C#"

Introduction

Taking as base from IntelliSense TextBox in C#, created by Anand Gunasekaran, I decided to create a new user control inherithed from TextBox that provides automatically an IntelliSense-Like function without calling any method.

Using the code

Building the control

The new control must have two important components: a list of strings for containing all the words we want for autocomplete and a ListBox that will show all the words in the list.

List<string> dictionary;
ListBox listbox;

Then, let's make a constructor for the class that allow us put the control in the UI designer and, of course, initialize the inner ListBox in the new IntelliSenseTextBox.

public IntelliSenseTextBox() : base()
{
    listbox = new ListBox();
    listbox.Parent = this;
    listbox.KeyUp += OnKeyUp;
    listbox.Visible = false;
    this.dictionary = new List<string>();
}

After, we will override some methods of the TextBox, specifically OnKeyPress and OnTextChanged

protected override void OnKeyPress(KeyPressEventArgs e)
{
    base.OnKeyPress(e);
    if (e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.Down)
    {
        if (listbox.Visible == true)
        {
            listbox.Focus();
        }
        e.Handled = true;
    }
    else if (e.KeyChar == (char)Keys.Escape)
    {
        listbox.Visible = false;
        e.Handled = true;
    }
}

protected override void OnTextChanged(EventArgs e)
{
    base.OnTextChanged(e);
    Point cp;
    GetCaretPos(out cp);
    List<string> lstTemp = new List<string>();

    listbox.SetBounds(cp.X + this.Left, cp.Y + this.Top + 20, 150, 50);
    var TempFilteredList = dictionary.Where(
             n => n.StartsWith(GetLastString(this.Text).ToUpper())).Select(r => r);

    lstTemp = TempFilteredList.ToList<string>();
    if (lstTemp.Count != 0 && GetLastString(this.Text) != "")
    {
        listbox.DataSource = lstTemp;
        listbox.Show();
    }
    else
    {
        listbox.Hide();
    }
}

Finally we must create the method to handle the KeyUp of the ListBox

private void OnKeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        string StrLS = GetLastString(this.Text);
        int LIOLS = this.Text.LastIndexOf(StrLS);
        string TempStr = this.Text.Remove(LIOLS);
        this.Text = TempStr + ((ListBox)sender).SelectedItem.ToString();
        this.Select(this.Text.Length, 0);
        listbox.Hide();
    }
}

Using the control

Now our IntelliSenseTextBox is complete but, we need to specify which words will be in the dictionary

public partial class Form1 : Form
{
    List<string> ISList = new List<string>(new string[]{ 
       "SELECT", 
       "CREATE", 
       "TABLE", 
       "JOB", 
       "INFO", 
       "SOLUTIONS", 
       "GOOGLE", 
       "VISUAL STUDIO" 
    });

    public Form1()
    {
        InitializeComponent();
        this.intelliSenseTextBox1.Dictionary = ISList;
    }
}

Points of Interest

When I saw the work of Anand Gunasekaran I was very interested in the topic so I decided to create this control for my school projects, specifically for a compiler in which a friend and I are working.

License

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

Share

About the Author

Alain Peralta
Student
Mexico Mexico
Great things come from rare ideas. Wink | ;)

Comments and Discussions

 
QuestionA screenshot would be nice! PinmemberDmitri Nеstеruk10-Mar-14 0:07 
AnswerRe: A screenshot would be nice! Pinprotectorthatraja10-Mar-14 0:21 
AnswerRe: A screenshot would be nice! PinmemberAlain Peralta10-Mar-14 10:27 
Questionthere got a bug PinmemberCosmic_Spy9-Mar-14 6:16 
AnswerRe: there got a bug PinmemberAlain Peralta9-Mar-14 6:30 

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

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

| Advertise | Privacy | Mobile
Web01 | 2.8.140922.1 | Last Updated 10 Mar 2014
Article Copyright 2014 by Alain Peralta
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid