|
2007/10/02(Tue) 14:48:44 編集(投稿者)
■No8529 (とくとく さん) に返信 > テキストを入力された場合に、リストボックスの値を頭から比較し、 > ヒットしたものだけを表示させたいです。
やり方はいろいろあるでしょうけれども、たとえば、こんな感じかな?
// ********* 案 1 ********* public partial class Form1 : Form { TextBox textBox1 = new TextBox(); ListBox listBox1 = new ListBox(); DataTable table = new DataTable(); BindingSource bindingSource1 = new BindingSource(); public Form1() { InitializeComponent();
table.Columns.Add("name"); table.Rows.Add("いちご"); table.Rows.Add("いちじく"); table.Rows.Add("りんご"); table.Rows.Add("メロン"); table.Rows.Add("すいか");
bindingSource1.DataSource = table;
textBox1.Location = new Point(15, 15); textBox1.Width = 150;
listBox1.Location = new Point(15, 40); listBox1.Size = new Size(150, 200); listBox1.DataSource = bindingSource1; listBox1.DisplayMember = "name";
textBox1.TextChanged += delegate { bindingSource1.Filter = string.Format( "SUBSTRING(name,1,{0})='{1}'", textBox1.TextLength, textBox1.Text.Replace("'", "''") ); };
Controls.Add(textBox1); Controls.Add(listBox1); } }
// ********* 案 2 ********* public partial class Form1 : Form { TextBox textBox1 = new TextBox(); ListBox listBox1 = new ListBox(); string[] list = { "いちご", "いちじく", "りんご", "メロン", "すいか" }; public Form1() { InitializeComponent();
textBox1.Location = new Point(15, 15); textBox1.Width = 150;
listBox1.Location = new Point(15, 40); listBox1.Size = new Size(150, 200); listBox1.DataSource = list;
textBox1.TextChanged += delegate { listBox1.DataSource = Array.FindAll(list, delegate(string s) { return s.StartsWith(textBox1.Text); }); };
Controls.Add(textBox1); Controls.Add(listBox1); } }
|