|
Hi Everyone,
Is there a way to display the suggestions in a list box with a key from textbox?
let say I type in TextBox "ap" then listbox will show
"apple"
"appliances"
"application"
something like that?
Thanks for your help.
|
|
|
|
|
You will have to build your own logic to implement this kind of textbox.
AutoCompleteMode [^] can be used - however, the dropdown still needs to be implemented.
This sample[^] might help you.
|
|
|
|
|
Thanks Abhinav,
I tried that already but I think I should display the suggestion in Listbox to create an awesome effect.
But thank you for the reply.
|
|
|
|
|
Yes you can do this. The events of the TextBox will help you in this case. You need to capture key events, may be KeyDown, KeyUp, or KeyPress help you in that case. In that event, write code for fetching the list which you need to bind with the listbox on the basis of the text entered in the TextBox and then bind it.
Hope it will work
modified 18-Aug-13 18:17pm.
|
|
|
|
|
Thanks SaqibRasheed,
I think this was a great suggestion. I am just wondering if there's a quick solution for that, like you just have to set the property of a list box same with the autoComplete feature of textbox.
Thanks.
|
|
|
|
|
I have worked with VS 2008 and there was no such property like autoComplete for TextBox. May be later versions of Visual Studio are having such property.
|
|
|
|
|
It's probably the case you just never used TextBox's AutoComplete facility, and have forgotten it was there.
AutoComplete facilities, like those in the ComboBox, have been implemented in the TextBox Control from .NET Framework 2.0~4.5, and in the .NET Client Profile from 3.5 SP1 to 4.
Visual Studio 2008, November, 2007, used FrameWork 3.5.
~
“This isn't right; this isn't even wrong." Wolfgang Pauli, commenting on a physics paper submitted for a journal
|
|
|
|
|
You can achieve this functionality using only a WinForms ComboBox.
Just set the ComboBox 'AutoComplete property to 'Suggest; and, set the 'AutoCompleteSoure property to 'ListItems. The AutoSuggest feature will work with the ComboBox 'DropDownStyle property set to either 'Simple, or 'DropDown, but not 'DropDownList.
Enter a set of items, using the design-time editor, for example:
aardvarks
axolotls
bears
beavers
bushmasters
chickens
civet cats
coyotes
dingos
eagles
foxes
gorillas
horses
hyenas
Run the application, and watch what's presented in the auto-dropdown when you type the character "b," and then observe what's presented when you enter "be."
Note that you can set the font, color, style, etc. of what your type, what's displayed after your choice, in the text-entry area, but the suggest drop-down items will use a default Windows small-size font.
You can also define a 'CustomSource for your 'Suggest list[^].
~
“This isn't right; this isn't even wrong." Wolfgang Pauli, commenting on a physics paper submitted for a journal
|
|
|
|
|
Thanks BillWood
I tried it before but I think I should display the suggestion on a listbox.
Thanks anyway.
|
|
|
|
|
A ListBox does not implement any AutoComplete facilities; it's one of the simpler Controls. It has no "DropDown" behavior built into it.
Of course, you could spend a few weeks building your own UserControl that contained a TextBox (which does support Auto-Complete), and somehow co-ordinate that with which items are displayed in a ListBox, and by the time you have wasted many hours developing that, and dealing with all the possible complications: you will have duplicated a ComboBox with AutoComplete, and that control is going to be very slow in response, compared to using a ComboBox
good luck, Bill
~
“This isn't right; this isn't even wrong." Wolfgang Pauli, commenting on a physics paper submitted for a journal
|
|
|
|
|
If I am understanding you goals correctly give this a try.
Create a new usercontrol and place a textbox and listbox on it.
Then add this as the code behind the control
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class UserControl1 : UserControl
{
private DataTable autocompletelist;
public UserControl1()
{
InitializeComponent();
autocompletelist = new DataTable();
autocompletelist.Columns.Add("item", typeof(string));
autocompletelist.DefaultView.Sort = "[item] ASC";
listBox1.DataSource = autocompletelist;
listBox1.DisplayMember = "item";
listBox1.ValueMember = "item";
listBox1.Visible = false;
fillautocomplete();
textBox1.TextChanged += textBox1_TextChanged;
listBox1.DoubleClick += listBox1_DoubleClick;
this.Leave += new System.EventHandler(this.UserControl1_Leave);
}
private void fillautocomplete()
{
autocompletelist.Rows.Add(new object[] { "ape" });
autocompletelist.Rows.Add(new object[] { "apple" });
autocompletelist.Rows.Add(new object[] { "apppliance" });
autocompletelist.Rows.Add(new object[] { "application" });
autocompletelist.Rows.Add(new object[] { "boy" });
autocompletelist.Rows.Add(new object[] { "bat" });
}
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
autocompletelist.DefaultView.RowFilter = "[item] LIKE '" + textBox1.Text + "*'";
listBox1.Visible = autocompletelist.DefaultView.Count > 0;
}
private void listBox1_DoubleClick(object sender, System.EventArgs e)
{
if (listBox1.SelectedValue != null)
{
textBox1.Text = listBox1.SelectedValue.ToString();
}
listBox1.Visible = false;
textBox1.SelectionStart = textBox1.Text.Length;
textBox1.Focus();
}
public override string Text
{
get {return textBox1.Text;}
set {textBox1.Text = value;}
}
private void UserControl1_Leave(object sender, EventArgs e)
{
listBox1.Visible = false;
}
}
}
|
|
|
|
|
Interesting work TnTinMn !
I really enjoyed studying your code, and seeing what you did with a DataSet, and the AutoComplete filter, thanks.
There are, however, some structural problems I see with your solution:
1. a ListBox has no 'AutoSize property: you never adjust its height, so, unless its height is equal to the possible maximum height (sum of the heights of all matches) of any possible single-character match, which, imho is undesirable visually. Then:
2. if the ListBox Height is too "short" to accommodate all the items of a given match: you will have to use the up-down selector at the ListBox right, to scroll to get to see all the possible matches. imho, that's an unacceptable burden on the user.
3. your solution will work for a single character entered at the start of a TextBox only.
4. when the TextBox is cleared, all the choices are displayed.
5. if you enter two spaces, followed by a valid letter, like "a" in this case, no choices appear.
If you modify your code like this:
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
if (string.IsNullOrWhiteSpace(textBox1.Text))
{
if (listBox1.Visible) listBox1.Visible = false;
return;
}
autocompletelist.DefaultView.RowFilter = "[item] LIKE '" + textBox1.Text + "*'";
if (autocompletelist.DefaultView.Count > 0)
{
listBox1.Visible = true;
listBox1.Height = (autocompletelist.DefaultView.Count + 1) * listBox1.ItemHeight;
}
else
{
listBox1.Visible = false;
}
} Now the user will see all the possible matches, filtered as you would expect, but the control's behavior still has the other problems mentioned above: with the code as it is now.
While your solution is "fun," haven't you duplicated the function of a ComboBox ?
yours, Bill
~
“This isn't right; this isn't even wrong." Wolfgang Pauli, commenting on a physics paper submitted for a journal
|
|
|
|
|
Bill,
I agree that this essentially duplicates that the function of the ComboBox and I see no need for it myself.
I had read through this thread and seen that you were trying to steer the OP to using a ComboBox (I agree that this makes the most sense), but he/she seemed insistent on having a separate list box. My primary goal was to show a simple way to create the filtered list and get it presented in the ListBox. I was not focused too much on the control's usability or aesthetics as those criteria would have been my own and not the OP's; after all, this is not an article on how to write a replacement ComboBox.
Quote: 3. your solution will work for a single character entered at the start of a TextBox only. I don't understand this statement. The filter will find all matches that start with the TextBox text.Quote: 5. if you enter two spaces, followed by a valid letter, like "a" in this case, no choices appear This by design (sheesh, I sound like MS justifying a bug ). It is the same filterin behavior that the ComboBox autocomplete has.
I'm glad that you had some fun playing with it.
|
|
|
|
|
Hi all!
First I want to thank to the site because really has a great utility, ever I have a question who has the answer in CodeProject.
I want to develop a software for a SME(Small and medium enterprise), and I think that should exists a template for develop it (with a basic management of customers, stock, registry of sales and purchases). I want to customize it a lot but I don't want to develop starting from zero, because I don't have much time and the base code is typical for all the SMEs. The base of the software is basic, for that I think that a open source code from a project should exists. I like C#, but I know Java, and C++ too.
Thanks all!!
|
|
|
|
|
Member 9901912 wrote: I think that should exists a template for develop it (with a basic management
of customers, stock, registry of sales and purchases).
Not likely. I've never seen nor heard of a "template" piece of software like you describe.
|
|
|
|
|
I agree with Dave, I am pretty sure such a template does not exists, there may be a database schema to get you started here[^]
The rest of it is going to have to be done from scratch I think.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
You may get some help on the internet - both with technology and the functional domain itself. However, there is no "boilerplate template" that will help you get any solution in place.
What you build is unique and your own solution so why do you want to use a template anyway?
|
|
|
|
|
Maybe a template was not the correct word.
I need a sample to help me to understand the structure or the solution clearly, to accelerate the time of design and the coding time. Is a typical program, I don't want to reinvent the wheel.
Thank's for the fast answers
|
|
|
|
|
Such large applications are not open source for a reason. They are very expensive to produce, and hence, the people/companies who make them charge of ton of money for them, not make them available freely.
|
|
|
|
|
i creat custom control that have a lable.
how can i expose all property of this lable for cotrol consumer
|
|
|
|
|
Make its access modifier public.
|
|
|
|
|
Bad idea!
You should not expose controls directly - it locks your control format so you cannot make any changes without risking breaking external code that uses the controls in ways you did not anticipate, and also constrains you to always use that control in future, even if you should "replace that text box with a drop down list and a numeric up-down because that reflects better what the data is used for". If you did, you would break outside code and potentially annoy a lot of people whose code relies on yours.
Instead, use a public property to get and set the value on your internal, hidden controls - that is why all controls default to private when you add them in the designer!
This message is manufactured from fully recyclable noughts and ones. To recycle this message, please separate into two tidy piles, and take them to your nearest local recycling centre.
Please note that in some areas noughts are always replaced with zeros by law, and many facilities cannot recycle zeroes - in this case, please bury them in your back garden and water frequently.
|
|
|
|
|
|
No, it is not a good idea - it is a very bad idea. Remember your OOPs concepts - this breaks them (pretty much all of them) and makes future development and maintenance much harder.
Just because you can do something, doesn't mean you should.
This message is manufactured from fully recyclable noughts and ones. To recycle this message, please separate into two tidy piles, and take them to your nearest local recycling centre.
Please note that in some areas noughts are always replaced with zeros by law, and many facilities cannot recycle zeroes - in this case, please bury them in your back garden and water frequently.
|
|
|
|
|
|