试图找出文本框集合中的任何文本框是否有重复的值(Visual c# 2010)
本文关键字:文本 Visual 2010 任何 集合 是否 | 更新日期: 2023-09-27 18:13:26
根据Oracle数据库中的参数自动生成表单上的文本框。用户以"A14/3"格式输入数据。我已经有代码把所有的文本框在一个集合。
var sortedTextboxes = panel1.Controls
.OfType<TextBox>() // get all textboxes controls
.OrderBy(ctrl => ctrl.Text); // order by TabIndex
foreach (TextBox txt in sortedTextboxes)
{
//parse and check format
}
我需要弄清楚如何检查副本。我将按文本排序,所以所有的值将按字母顺序排列。我可以只是检查当前文本框的值与前一个文本框的值?如果有,我该怎么做呢?
如果您根据Text
对结果进行分组,然后仅获取计数大于1的项目,则可以获得重复的文本框及其内容。如:
var sortedTextboxes = panel1.Controls
.OfType<TextBox>() // get all textboxes controls
.GroupBy(r => r.Text)
.Where(grp=> grp.Count() > 1)
.Select(grp => new
{
DuplicateText = grp.Key,
DuplicateTextBoxes = grp.Select(r => r).ToList(),
});
您可以将所有值插入字符串的哈希集,然后将文本框集合计数与哈希集集合计数进行比较。如果相同,则没有重复项
var hash = new HashSet<string>();
foreach(var textBox in textBoxes){
if(hash.contains(textBox.Value){
break;
hash.add(textBox.Vaule);
}
if(hash.Count != textBoxes.Count){
//duplicate
}
更改代码以保存先前的文本框id
var sortedTextboxes = panel1.Controls
.OfType<TextBox>() // get all textboxes controls
.OrderBy(ctrl => ctrl.Text); // order by TabIndex
var preTextboxId = " ";foreach (sortedTextboxes中的文本框){
//parse and check format
if ( preTextboxId == txt.id)
{
//duplicate
}
else
{
add text box
}
preTextboxId = txt.id
}