C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ありがとうございました


(過去ログ 20 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■8529 / inTopicNo.1)  リストボックスを検索
  
□投稿者/ とくとく (3回)-(2007/10/02(Tue) 14:06:23)

分類:[C#] 

2007/10/03(Wed) 09:44:24 編集(投稿者)
2007/10/02(Tue) 14:11:39 編集(投稿者)
2007/10/02(Tue) 14:08:22 編集(投稿者)

C#2005を使っています。

テキストを入力された場合に、リストボックスの値を頭から比較し、
ヒットしたものだけを表示させたいです。

<例>
┌────┐←テキストボックス
└────┘

┌────┐←リストボックス
 いちご
 いちじく
 りんご 
 メロン 
 すいか 
└────┘


・テキストボックスに「い」を入力すると、いちご、いちじく、いんげん
・「いち」でいちご、いちじく
・テキストボックスを空にすると、初回表示の状態。

…このようなことがしたく色々検索してみましたが、
リストボックスの値を検索する方法がどうしてもわかりませんでした。

すみませんが、どなたかヒントをいただけないでしょうか…
引用返信 編集キー/
■8531 / inTopicNo.2)  とりあえず、サンプル
□投稿者/ 魔界の仮面弁士 (439回)-(2007/10/02(Tue) 14:46:43)
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);
 }
}
引用返信 編集キー/
■8569 / inTopicNo.3)  ありがとうございました
□投稿者/ とくとく (4回)-(2007/10/03(Wed) 11:17:45)
2007/10/03(Wed) 11:18:29 編集(投稿者)
2007/10/03(Wed) 11:18:25 編集(投稿者)

>魔界の仮面弁士様

レスありがとうございます。
コードまで書いていただいて本当恐縮です。
大変参考になりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -