试图找出文本框集合中的任何文本框是否有重复的值(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
}

我需要弄清楚如何检查副本。我将按文本排序,所以所有的值将按字母顺序排列。我可以只是检查当前文本框的值与前一个文本框的值?如果有,我该怎么做呢?

试图找出文本框集合中的任何文本框是否有重复的值(Visual c# 2010)

如果您根据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

}