怎么解决这些重复的代码啊?

解决方案 »

  1.   

                var tb = sender as TextBox;
                if (tb != null)
                {
                    var compare = this.Controls.Find("z" + Regex.Replace(tb.Name, @"\D", string.Empty), true);
                    if (compare != null && compare.Length > 0 && compare[0] is TextBox)
                    {
                        if (tb.Text == ((TextBox)compare[0]).Text)
                        {
                            tb.ForeColor = Color.Red;
                        }
                    }
                }
    你的id命名规则必须如你代码所写的那样一一对应
      

  2.   

    你把这4个代码 copy 在一个方法里,不是也还是要重写一遍?
      

  3.   

    zXX我这里假设是TextBox,如果不是自行调整
      

  4.   

    this.Controls.Find那块可以精准调整为包含的Control以减少查找范围,后面是否包含子控件设为false
      

  5.   

    主要是你理解的编程模式,你说的“写在一起”这个本身不是一个学过的模式。如果只写一遍代码,那么需要高一个编程层级。例如void 注册监听(TextBox txt1,  TextBox txt2)
    {
        txt1.TextChanged += (s, e) =>
        {
            if (txt1.Text == txt2.Text)
                txt1.ForeColor = System.Drawing.Color.Red;
            else
                txt1.ForeColor = System.Drawing.Color.Black;
        };
    }
    这样就能少写代码。“学过之后”你千万不要再说什么“写在一起”。这就好像是堆石头跟建筑设计的区别,是有着本质的区别的。
      

  6.   

    只写一个事件方法,把需要执行该事件方法的控件都绑定注册一下,如1楼版主发的
    不过楼主你这个如果不是相等就是红的,那一开始输入个值就是红色的,然后就会一直是红的了还要加else吧
    textBox12.ForeColor = Color.Black;
      

  7.   

    10个控件的事件绑定到同一个过程,sender就是当前出触发事件的控件。后面你懂的。
      

  8.   

    哇,大家真快,上午就看到了,写了一点,就忙去了class myText
    {
        public TextBox t1;
        public TextBox t2;
        public myText(TextBox p_t1,TextBox p_t2)
        {
            t1 = p_t1;
            t2 = p_t2;
            t1.TextChanged += (s, e) =>
                {
                    if (t1.Text == t2.Text)
                    {
                        t1.ForeColor = System.Drawing.Color.Red;
                    }
                    else
                    {
                        t1.ForeColor = System.Drawing.Color.Black;
                    }
                };
        }
    }private void Form5_Load(object sender, EventArgs e)
    {
        myText[] theText = { new myText(textBox1,z1), new myText(textBox2,z2)};
        //do other things}
    需要窗体上有textBox1,textBox2;z1,z2 四个文本框
      

  9.   

    如果textbox之间是确定性的对应关系,就用Dictionary预先确定保存一一对应的关系,这样可以避免查询,提高可读性       TextBox textbox1, textbox2;
            TextBox tb1, tb2;
            Dictionary<TextBox, TextBox> TextBoxMap { get; set; }        private void Initialize()
            {
                TextBoxMap = new Dictionary<TextBox, TextBox>()
                {
                    {textbox1,tb1 },{textbox2,tb2}
                };            TextBoxMap.Keys.ToList().ForEach(tb => tb.TextChanged += (s, e) =>
                {
                    if (s is TextBox t1 && TextBoxMap.TryGetValue(t1, out TextBox t2))
                    {
                        t1.ForeColor = t1.Text == t2.Text ? Color.Red : Color.Black;
                    }
                });
            }
      

  10.   

    这个问题,让我想到之前有人写的计算器程序
    我在3楼回答了
    http://bbs.csdn.net/topics/392294918
      

  11.   

    switch语句啊
      

  12.   

    自己写的一个三句话实现简单计算器
    http://blog.csdn.net/yuhijk2055/article/details/78766312