回答編集履歴
4
Typo
answer
CHANGED
@@ -172,5 +172,5 @@
|
|
172
172
|
|
173
173
|
補足ですが、ComboBoxのListBoxに要素を追加したいなら、```ComboBox.Items.Add```メソッドを利用して追加し、TextBox部分に、表示したいのなら、```ComboBox.Text```プロパティに文字列を指定する必要があります。
|
174
174
|
|
175
|
-
また蛇足ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に
|
175
|
+
また蛇足ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に元の質問からずいぶん質問そのものが変化していますよね?)
|
176
176
|
なので、別に質問をすべきではなかったのかなと思います。
|
3
Typo
answer
CHANGED
@@ -172,5 +172,5 @@
|
|
172
172
|
|
173
173
|
補足ですが、ComboBoxのListBoxに要素を追加したいなら、```ComboBox.Items.Add```メソッドを利用して追加し、TextBox部分に、表示したいのなら、```ComboBox.Text```プロパティに文字列を指定する必要があります。
|
174
174
|
|
175
|
-
また
|
175
|
+
また蛇足ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に下質問からずいぶん質問そのものが変化していますよね?)
|
176
176
|
なので、別に質問をすべきではなかったのかなと思います。
|
2
コメント受けて追記
answer
CHANGED
@@ -42,6 +42,135 @@
|
|
42
42
|
|
43
43
|
```
|
44
44
|
|
45
|
-
|
45
|
+
_list内の文字列が半角英数で有ればうまく行きますが、全角英数が入ったら破綻します。(半角・全角のCase-sensitivityは存在するので)
|
46
46
|
|
47
|
-
また、TextBoxが空の場合は、すべてが引っかかりますのでその点もご注意の程。
|
47
|
+
また、TextBoxが空の場合は、すべてが引っかかりますのでその点もご注意の程。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
---
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
ココよりコメント受けての追記
|
56
|
+
|
57
|
+
foreach以降は
|
58
|
+
|
59
|
+
[LINQ](https://docs.microsoft.com/ja-jp/dotnet/articles/csharp/programming-guide/concepts/linq/introduction-to-linq-queries)を使って要素の抽出をしています。
|
60
|
+
その子細に関しては、ココではオフトピックとなりますので、リンク先をご参照ください。
|
61
|
+
|
62
|
+
前方一致させる場合は、```string.IndexOf```メソッドを使い、結果が0で有れば、前方一致していることになるので、下記のようになります。
|
63
|
+
|
64
|
+
以下のサンプルコードは
|
65
|
+
|
66
|
+
0. ```button1```は最初のまま、含まれていればマッチ
|
67
|
+
0. ```button2```はLINQを使って前方一致を実装
|
68
|
+
0. ```button3```はLINQを使わずに実装
|
69
|
+
|
70
|
+
となります。
|
71
|
+
|
72
|
+
```csharp
|
73
|
+
|
74
|
+
using System;
|
75
|
+
using System.Collections.Generic;
|
76
|
+
using System.Linq;
|
77
|
+
using System.Windows.Forms;
|
78
|
+
|
79
|
+
namespace WindowsFormsApp3
|
80
|
+
{
|
81
|
+
public partial class Form1 : Form
|
82
|
+
{
|
83
|
+
private readonly List<string> _list = new List<string>
|
84
|
+
{
|
85
|
+
"A",
|
86
|
+
"ABC",
|
87
|
+
"RAND",
|
88
|
+
"HELLO"
|
89
|
+
};
|
90
|
+
|
91
|
+
public Form1()
|
92
|
+
{
|
93
|
+
InitializeComponent();
|
94
|
+
}
|
95
|
+
|
96
|
+
/// <summary>
|
97
|
+
/// 含まれていればOK
|
98
|
+
/// </summary>
|
99
|
+
/// <param name="sender"></param>
|
100
|
+
/// <param name="e"></param>
|
101
|
+
private void button1_Click(object sender, EventArgs e)
|
102
|
+
{
|
103
|
+
comboBox1.Items.Clear();
|
104
|
+
comboBox1.Text = "";
|
105
|
+
|
106
|
+
|
107
|
+
foreach (var str in _list.Where(x => x.ToLower().Contains(textBox1.Text.ToLower())))
|
108
|
+
comboBox1.Items.Add(str);
|
109
|
+
|
110
|
+
if (comboBox1.Items.Count != 0) comboBox1.Text = (string) comboBox1.Items[0];
|
111
|
+
}
|
112
|
+
|
113
|
+
/// <summary>
|
114
|
+
/// 前方一致
|
115
|
+
/// </summary>
|
116
|
+
/// <param name="sender"></param>
|
117
|
+
/// <param name="e"></param>
|
118
|
+
private void button2_Click(object sender, EventArgs e)
|
119
|
+
{
|
120
|
+
//ComboBoxを初期化
|
121
|
+
comboBox2.Items.Clear();
|
122
|
+
comboBox2.Text = "";
|
123
|
+
|
124
|
+
//検索対象の文字列を取得
|
125
|
+
var matchStr = textBox1.Text.ToLower();
|
126
|
+
|
127
|
+
//LINQを利用したフィルタリング
|
128
|
+
|
129
|
+
var resultSeq = _list.Where(x => x.ToLower().IndexOf(matchStr) == 0);
|
130
|
+
|
131
|
+
//ComboBox.Itemsに結果を追加
|
132
|
+
foreach (var elem in resultSeq)
|
133
|
+
comboBox2.Items.Add(elem);
|
134
|
+
|
135
|
+
//抽出結果が0出なければ最初の要素をテキストボックスに設定
|
136
|
+
if (comboBox2.Items.Count != 0) comboBox2.Text = (string) comboBox2.Items[0];
|
137
|
+
}
|
138
|
+
|
139
|
+
/// <summary>
|
140
|
+
/// 前方一致をLINQつか言わないで書いてみた。
|
141
|
+
/// </summary>
|
142
|
+
/// <param name="sender"></param>
|
143
|
+
/// <param name="e"></param>
|
144
|
+
private void button3_Click(object sender, EventArgs e)
|
145
|
+
{
|
146
|
+
//ComboBoxを初期化
|
147
|
+
comboBox2.Items.Clear();
|
148
|
+
comboBox2.Text = "";
|
149
|
+
|
150
|
+
//検索対象の文字列を取得
|
151
|
+
var matchStr = textBox1.Text.ToLower();
|
152
|
+
|
153
|
+
//LINQを利用したフィルタリング
|
154
|
+
//ComboBox.Itemsに結果を追加
|
155
|
+
foreach (var elem in _list)
|
156
|
+
{
|
157
|
+
//小文字に正規化
|
158
|
+
var regularize = elem.ToLower();
|
159
|
+
|
160
|
+
//前方一致するか判定.マッチしたらコンボボックスに追加
|
161
|
+
if (regularize.IndexOf(matchStr) == 0) comboBox2.Items.Add(elem);
|
162
|
+
}
|
163
|
+
|
164
|
+
//抽出結果が0出なければ最初の要素をテキストボックスに設定
|
165
|
+
if (comboBox2.Items.Count != 0) comboBox2.Text = (string) comboBox2.Items[0];
|
166
|
+
}
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
|
171
|
+
```
|
172
|
+
|
173
|
+
補足ですが、ComboBoxのListBoxに要素を追加したいなら、```ComboBox.Items.Add```メソッドを利用して追加し、TextBox部分に、表示したいのなら、```ComboBox.Text```プロパティに文字列を指定する必要があります。
|
174
|
+
|
175
|
+
また老婆心ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に下質問からずいぶん質問そのものが変化していますよね?)
|
176
|
+
なので、別に質問をすべきではなかったのかなと思います。
|
1
ゴミがサンプルに残っていたので除去
answer
CHANGED
@@ -29,7 +29,6 @@
|
|
29
29
|
comboBox1.Items.Clear();
|
30
30
|
comboBox1.Text = "";
|
31
31
|
|
32
|
-
var text = "hello";
|
33
32
|
|
34
33
|
foreach (var str in _list.Where(x => x.ToLower().Contains(textBox1.Text.ToLower())))
|
35
34
|
comboBox1.Items.Add(str);
|