我有两个控件,一个是“增行”一个为“减行”的按键
增行的代码为
        private int count = 0;//用于计数,添加了多少个按钮
        private void button2_Click(object sender, EventArgs e)
        {
            count++;
            TextBox textBoxNO = new TextBox(); //实例化控件
            textBoxNO.Size = new Size(18, 21);  //大小
            textBoxNO.Name = "NO" + count.ToString(); //名称
            textBoxNO.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //文本对齐
            this.panel7.Controls.Add(textBoxNO);  //添加
            textBoxNO.Text = count.ToString();  //文本内容            TextBox textBoxMemo = new TextBox(); //实例化控件
            textBoxMemo.Size = new Size(455, 36);  //大小
            textBoxMemo.Multiline = true; //多行文本
            textBoxMemo.Name = "Memo" + count.ToString(); //名称
            textBoxMemo.ScrollBars = System.Windows.Forms.ScrollBars.Both; //滚动条
            this.panel7.Controls.Add(textBoxMemo);  //添加            TextBox textBoxMoney = new TextBox(); //实例化控件
            textBoxMoney.Size = new Size(105, 21);  //大小
            textBoxMoney.Name = "Money" + count.ToString(); //名称
            textBoxMoney.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; //文本对齐
            this.panel7.Controls.Add(textBoxMoney);  //添加
        }
每按一次就在同一行增加三个TextBox,现在是如做当按“减行”时则删除最后一行,每一行的第一个TextBox是为序列,当无论如何添加或移除序列都是按顺序(1,2,3....)排列的。请前辈指点!谢谢

解决方案 »

  1.   

    this.Controls.Remove(this.Controls.OfType<TextBox>().OrderBy(x => x.Name).Last());
      

  2.   

    你好,老兄!看了你的代码还不知道是啥原理?套上去用也没得,能否详说,因为这样的代码还是第一见,请指点!能否加你QQ,我的Q:191971159
      

  3.   

    没仔细看
    this.panel7.Controls.Remove(this.panel7.Controls.OfType<TextBox>().OrderBy(x => x.Name).Last());这样应该差不多了 :)
      

  4.   

    这么晚了你也还没休息!
    我不知道什么改用你的代码,删除是可以了,但没有“每按一次就在同一行增加三个TextBox,现在是如做当按“减行”时则删除最后一行(一行有三个TextBox),每一行的第一个TextBox是为序列,当无论如何添加或移除序列都是按顺序(1,2,3....)排列的。”
    能否加你Q呢?谢谢!
      

  5.   

    删除最后3个
    var todelete = this.panel7.Controls.OfType<TextBox>().OrderByDescending(x => x.Name).Take(3);
    foreach (var item in todelete)
    {
        this.panel7.Controls.Remove(item);
    }
      

  6.   

    也许你是要
    string[] prefix = new string[] { "NO", "Memo", "Money" };
    var todelete = prefix.Select(y => this.panel7.Controls.OfType<TextBox>().Where(x => x.Name.StartWith(y)).OrderBy(x => x.Name).Last());
    foreach (var item in todelete)
    {
        this.panel7.Controls.Remove(item);
    }
      

  7.   


    能否讲一下代码中的符号作用?
    还是有点错误
    错误 1 “string”不包含“StartWith”的定义,并且找不到可接受类型为“string”的第一个参数的扩展方法“StartWith”(是否缺少 using 指令或程序集引用?) F:\InformationSystem\InformationSystem\UILevel\AgrMain.cs 721 104 InformationSystem
      

  8.   

    “StartWith”改为“StartsWith“!
      

  9.   

    谢谢各位了!有朋友能帮详解
    var todelete = prefix.Select(y => this.panel7.Controls.OfType<TextBox>().Where(x => x.Name.StartWith(y)).OrderBy(x => x.Name).Last());
    这句的用意吗?
    我每点删除行则count-1。当添加行超过10行后,删除一行不是删除第10行,而是第9行开始删除!想对上面这代码作修改,但不知道从何入手,请朋友们指点!
      

  10.   

    OrderBy(x => x.Name)
    =>
    OrderBy(x => Convert.ToInt32(Regex.Match(x.Name, @"\d+").Value))因为按照字符排序 TextBox10 排在 TextBox9 前面。
      

  11.   

    这个是linq,你可以找一本C#2008以后的书看看。
      

  12.   

    去掉 .where以及之后的,将会返回所有的TextBox。
    然后再循环删除。
      

  13.   

    谢谢了!
    这方面知识一点不了解,期待你的指点!想来想去,还是只会用最笨的做法了。
                if (panel12.Controls.Count>0)
                {
                    for (int i = 0; i < this.panel12.Controls.Count+1; i++)
                    {
                        string[] prefix = new string[] { "NO", "Memo", "Money" };
                        var todelete = prefix.Select(y => this.panel12.Controls.OfType<TextBox>().Where(x => x.Name.StartsWith(y)).OrderBy(x => x.Name).Last());
                        foreach (var item in todelete)
                        {
                            this.panel12.Controls.Remove(item);
                        }
                    }
                }