我的winform中有10个文本框。
为了执行某些验证,我使用OnValidating事件处理程序进行一些处理。为方便起见,我在IEnumerable集合中添加了所有这些文本框控件。
IEnumerable<TextBox> txtBoxList;
在OnValidating事件处理程序中,我需要LINQ查询帮助以字符串集合的形式获取文本框的所有当前值
即。 IList<string> contentList;
现在,我的要求是将文本框的值(非空)作为字符串集合。我想利用LINQ。
我使用的这个查询只返回不同的值
contentList = txtBoxList.GroupBy(t => t.Text)
.Where(g => !string.IsNullOrEmpty(g.Key))
.Select(grp => grp.Key)
.ToList();
即,如果textbox1和textbox2具有相同的内容,
ex: textbox1 : "John" and textbox2 : "John"
然后它只返回一次&#34; John&#34;。
我需要您的帮助才能在字符串集合中获取文本框的所有值( 包括重复项 )
等待回应 VATSAG
答案 0 :(得分:4)
如果我理解正确,那么你想要
this.Controls.OfType<TextBox>().Where(tb => !string.IsNullOrEmpty(tb.Text))
.Select(tb => tb.Text);
在表单上查找文本框中的所有控件,选择那些不为空的控件,并获取文本
您可能想要做的是先将文本框添加到面板,然后在该面板上找到文本框..
panelName.Controls.OfType<TextBox>()....
答案 1 :(得分:1)
你不能做
contentList = txtBoxList.Where(t => t.Text != null)
.Select(t => t.Text)
.ToList();
答案 2 :(得分:1)
您按文字分组,e。 G。 “john”,“john”,“doe”,“bla”将成为“john”,“doe”,“bla”因为你正在分组相同的字符串。
您可以这样做:
contentList = txtBoxList.Where(g => !string.IsNullOrEmpty(g))
.Select(t => t.Text)
.ToList();
答案 3 :(得分:0)
contentList = txtBoxList.GroupBy(t => t)
.Where(g => !string.IsNullOrEmpty(g.Key))
.SelectMany(grp => grp.Skip(1))
.ToList();
这将列出所有重复项。