解决方案 »

  1.   

    引入System.Linq 空间。
    1:使用 操作符Any 判断是否存在,如果存在 则改变颜色并且存到集合A。
    2:strs1的剩余元素 可以使用Except  来求与集合A的差集,再使用Any操作符判断是否存在strs4,存在做相应的设置。
      

  2.   

    改一下顺序
    循环map
    然后判断其他数组,是否Contains  map[index]元素,在的话,就根据当前索引去设置对应框框的底色
      

  3.   

    把textbox和其text存入Dictionary会比较好些        private void button1_Click(object sender, EventArgs e)
            {
                this.textBox2.Text = "编";
                this.textBox3.Text = "服";
                this.textBox4.Text = "飞";
                this.textBox5.Text = "服";
                this.textBox6.Text = "务";
                this.textBox7.Text = "器";
                this.textBox8.Text = "程";
                this.textBox9.Text = "机";            Dictionary<TextBox, string> map = new Dictionary<TextBox, string>();
                List<string> strs1 = new List<string>();
                foreach (Control c in this.Controls)
                {
                    if (c is TextBox)
                    {
                        map.Add((c as TextBox),(c as TextBox).Text);
                    }
                }
                string[] strs2 = { "笔", "记", "本" };
                string[] strs3 = { "服", "务", "器" };
                string[] strs4 = { "飞", "机" };
                foreach (KeyValuePair<TextBox, string> key in map)
                {
                    if (strs2.Where(s => s == key.Value).Count() > 0 || strs3.Where(s => s == key.Value).Count() > 0)
                    {
                        key.Key.BackColor = Color.Red;
                    }
                    if (strs4.Where(s => s == key.Value).Count() > 0)
                    {
                        key.Key.BackColor = Color.Yellow;
                    }
                }
            }
      

  4.   

    Quote: 引用 5 楼 sunny906 的回复:
    可能是我没说清楚,不是查找单个元素,又该如何修改呢??
    如:文本框中若只输入“服”、“务”,由于没有包含strs3的所有元素-"服"、“务”、"器",则不显示
      

  5.   

    如果strs2常量数组涵盖strs4,貌似上面的方法应该是行不通的。
    应先将比较后剩余的元素组成一个数组,再与strs4进行比较,具体代码该怎么实现,求解!
      

  6.   


            private void button1_Click(object sender, EventArgs e)
            {
                this.textBox2.Text = "编";
                this.textBox3.Text = "服";
                this.textBox4.Text = "飞";
                this.textBox5.Text = "服";
                this.textBox6.Text = "务";
                this.textBox7.Text = "器";
                this.textBox8.Text = "程";
                this.textBox9.Text = "机";            Dictionary<TextBox, string> map = new Dictionary<TextBox, string>();
                List<string> strs1 = new List<string>();
                foreach (Control c in this.Controls)
                {
                    if (c is TextBox)
                    {
                        map.Add((c as TextBox), (c as TextBox).Text);
                    }
                }
                string[] strs2 = { "笔", "记", "本" };
                string[] strs3 = { "服", "务", "器", "本" };
                string[] strs4 = { "服", "务", "飞", "机" };            List<string> newStrs2 = strs2.Union(strs3).Except(strs4).ToList();
                foreach (KeyValuePair<TextBox, string> key in map)
                {
                    if (newStrs2.Contains(key.Value))
                    {
                        key.Key.BackColor = Color.Red;
                    }
                    if (strs4.Contains(key.Value))
                    {
                        key.Key.BackColor = Color.Yellow;
                    }
                }
            }
      

  7.   

    如果你的strs2和strs3逻辑一样的话
    你不如先把它们合并后去重复,再进行判断,逻辑就清晰了
      

  8.   

    我自己没去试。
    不过感觉用Linq很简单就可以实现吧。
    谁用LINQ 写出来了 发出来看看吧
      

  9.   

    还是很感谢 sunny906,提出了“把textbox和其text存入Dictionary”的思路,但如果整个界面存在20个textbox,仅仅只取其中的8个textbox来进行判断,该方法是否可行?
    再者,给出的以下代码,如果在实际运用中,存在需要比较的20组常量数组,可能就不太适用了。
                string[] strs2 = { "笔", "记", "本" };
                string[] strs3 = { "服", "务", "器", "本" };
                string[] strs4 = { "服", "务", "飞", "机" };
                List<string> newStrs2 = strs2.Union(strs3).Except(strs4).ToList();
                foreach (KeyValuePair<TextBox, string> key in map)
    为避免出现歧义,重新明确下需求,希望集思广益,给出具体代码,以供参考:
    1. 将textbox1-textbox5中的字符组成一个变量数组strs1={a,b,c,d,e};
    2. 若常量数组strs2={a1,a2,a3}中的每个元素都存在于strs1中,a1、a2、a3元素所在的文本框背景色变为红色(strs1只包含2个或1个strs2的元素,则该判据失效);
    3. 若步骤2的判据生效,则去除strs1中的a1、a2、a3元素,构建一个新的数组newstrs1后,与常量数组strs3={b1,b2}进行比较;若步骤2的判据失效,则将strs1与strs3进行比较;
    4. 若数组strs3的所有元素都存在于数组newstrs1或strs1中,则元素所在的文本框背景色变为黄色。