回答編集履歴

4

Typo

2017/05/26 06:21

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -346,6 +346,6 @@
346
346
 
347
347
 
348
348
 
349
- また蛇足ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に質問からずいぶん質問そのものが変化していますよね?)
349
+ また蛇足ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に元の質問からずいぶん質問そのものが変化していますよね?)
350
350
 
351
351
  なので、別に質問をすべきではなかったのかなと思います。

3

Typo

2017/05/26 06:21

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -346,6 +346,6 @@
346
346
 
347
347
 
348
348
 
349
- また老婆心ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に下質問からずいぶん質問そのものが変化していますよね?)
349
+ また蛇足ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に下質問からずいぶん質問そのものが変化していますよね?)
350
350
 
351
351
  なので、別に質問をすべきではなかったのかなと思います。

2

コメント受けて追記

2017/05/26 06:20

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -86,8 +86,266 @@
86
86
 
87
87
 
88
88
 
89
- ```_list```内の文字列が半角英数で有ればうまく行きますが、全角英数が入ったら破綻します。(半角・全角のCase-sensitivityは存在するので)
89
+ _list内の文字列が半角英数で有ればうまく行きますが、全角英数が入ったら破綻します。(半角・全角のCase-sensitivityは存在するので)
90
90
 
91
91
 
92
92
 
93
93
  また、TextBoxが空の場合は、すべてが引っかかりますのでその点もご注意の程。
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+ ---
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+ ココよりコメント受けての追記
110
+
111
+
112
+
113
+ foreach以降は
114
+
115
+
116
+
117
+ [LINQ](https://docs.microsoft.com/ja-jp/dotnet/articles/csharp/programming-guide/concepts/linq/introduction-to-linq-queries)を使って要素の抽出をしています。
118
+
119
+ その子細に関しては、ココではオフトピックとなりますので、リンク先をご参照ください。
120
+
121
+
122
+
123
+ 前方一致させる場合は、```string.IndexOf```メソッドを使い、結果が0で有れば、前方一致していることになるので、下記のようになります。
124
+
125
+
126
+
127
+ 以下のサンプルコードは
128
+
129
+
130
+
131
+ 0. ```button1```は最初のまま、含まれていればマッチ
132
+
133
+ 0. ```button2```はLINQを使って前方一致を実装
134
+
135
+ 0. ```button3```はLINQを使わずに実装
136
+
137
+
138
+
139
+ となります。
140
+
141
+
142
+
143
+ ```csharp
144
+
145
+
146
+
147
+ using System;
148
+
149
+ using System.Collections.Generic;
150
+
151
+ using System.Linq;
152
+
153
+ using System.Windows.Forms;
154
+
155
+
156
+
157
+ namespace WindowsFormsApp3
158
+
159
+ {
160
+
161
+ public partial class Form1 : Form
162
+
163
+ {
164
+
165
+ private readonly List<string> _list = new List<string>
166
+
167
+ {
168
+
169
+ "A",
170
+
171
+ "ABC",
172
+
173
+ "RAND",
174
+
175
+ "HELLO"
176
+
177
+ };
178
+
179
+
180
+
181
+ public Form1()
182
+
183
+ {
184
+
185
+ InitializeComponent();
186
+
187
+ }
188
+
189
+
190
+
191
+ /// <summary>
192
+
193
+ /// 含まれていればOK
194
+
195
+ /// </summary>
196
+
197
+ /// <param name="sender"></param>
198
+
199
+ /// <param name="e"></param>
200
+
201
+ private void button1_Click(object sender, EventArgs e)
202
+
203
+ {
204
+
205
+ comboBox1.Items.Clear();
206
+
207
+ comboBox1.Text = "";
208
+
209
+
210
+
211
+
212
+
213
+ foreach (var str in _list.Where(x => x.ToLower().Contains(textBox1.Text.ToLower())))
214
+
215
+ comboBox1.Items.Add(str);
216
+
217
+
218
+
219
+ if (comboBox1.Items.Count != 0) comboBox1.Text = (string) comboBox1.Items[0];
220
+
221
+ }
222
+
223
+
224
+
225
+ /// <summary>
226
+
227
+ /// 前方一致
228
+
229
+ /// </summary>
230
+
231
+ /// <param name="sender"></param>
232
+
233
+ /// <param name="e"></param>
234
+
235
+ private void button2_Click(object sender, EventArgs e)
236
+
237
+ {
238
+
239
+ //ComboBoxを初期化
240
+
241
+ comboBox2.Items.Clear();
242
+
243
+ comboBox2.Text = "";
244
+
245
+
246
+
247
+ //検索対象の文字列を取得
248
+
249
+ var matchStr = textBox1.Text.ToLower();
250
+
251
+
252
+
253
+ //LINQを利用したフィルタリング
254
+
255
+
256
+
257
+ var resultSeq = _list.Where(x => x.ToLower().IndexOf(matchStr) == 0);
258
+
259
+
260
+
261
+ //ComboBox.Itemsに結果を追加
262
+
263
+ foreach (var elem in resultSeq)
264
+
265
+ comboBox2.Items.Add(elem);
266
+
267
+
268
+
269
+ //抽出結果が0出なければ最初の要素をテキストボックスに設定
270
+
271
+ if (comboBox2.Items.Count != 0) comboBox2.Text = (string) comboBox2.Items[0];
272
+
273
+ }
274
+
275
+
276
+
277
+ /// <summary>
278
+
279
+ /// 前方一致をLINQつか言わないで書いてみた。
280
+
281
+ /// </summary>
282
+
283
+ /// <param name="sender"></param>
284
+
285
+ /// <param name="e"></param>
286
+
287
+ private void button3_Click(object sender, EventArgs e)
288
+
289
+ {
290
+
291
+ //ComboBoxを初期化
292
+
293
+ comboBox2.Items.Clear();
294
+
295
+ comboBox2.Text = "";
296
+
297
+
298
+
299
+ //検索対象の文字列を取得
300
+
301
+ var matchStr = textBox1.Text.ToLower();
302
+
303
+
304
+
305
+ //LINQを利用したフィルタリング
306
+
307
+ //ComboBox.Itemsに結果を追加
308
+
309
+ foreach (var elem in _list)
310
+
311
+ {
312
+
313
+ //小文字に正規化
314
+
315
+ var regularize = elem.ToLower();
316
+
317
+
318
+
319
+ //前方一致するか判定.マッチしたらコンボボックスに追加
320
+
321
+ if (regularize.IndexOf(matchStr) == 0) comboBox2.Items.Add(elem);
322
+
323
+ }
324
+
325
+
326
+
327
+ //抽出結果が0出なければ最初の要素をテキストボックスに設定
328
+
329
+ if (comboBox2.Items.Count != 0) comboBox2.Text = (string) comboBox2.Items[0];
330
+
331
+ }
332
+
333
+ }
334
+
335
+ }
336
+
337
+
338
+
339
+
340
+
341
+ ```
342
+
343
+
344
+
345
+ 補足ですが、ComboBoxのListBoxに要素を追加したいなら、```ComboBox.Items.Add```メソッドを利用して追加し、TextBox部分に、表示したいのなら、```ComboBox.Text```プロパティに文字列を指定する必要があります。
346
+
347
+
348
+
349
+ また老婆心ながら、初期の質問に対する回答に対する貴方のコメントは下の質問からずいぶん離れたイメージを個人的に持ちました。(現に下質問からずいぶん質問そのものが変化していますよね?)
350
+
351
+ なので、別に質問をすべきではなかったのかなと思います。

1

ゴミがサンプルに残っていたので除去

2017/05/26 06:20

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -60,8 +60,6 @@
60
60
 
61
61
 
62
62
 
63
- var text = "hello";
64
-
65
63
 
66
64
 
67
65
  foreach (var str in _list.Where(x => x.ToLower().Contains(textBox1.Text.ToLower())))