我有两个控件,一个是“增行”一个为“减行”的按键
增行的代码为
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....)排列的。请前辈指点!谢谢
增行的代码为
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....)排列的。请前辈指点!谢谢
this.panel7.Controls.Remove(this.panel7.Controls.OfType<TextBox>().OrderBy(x => x.Name).Last());这样应该差不多了 :)
我不知道什么改用你的代码,删除是可以了,但没有“每按一次就在同一行增加三个TextBox,现在是如做当按“减行”时则删除最后一行(一行有三个TextBox),每一行的第一个TextBox是为序列,当无论如何添加或移除序列都是按顺序(1,2,3....)排列的。”
能否加你Q呢?谢谢!
var todelete = this.panel7.Controls.OfType<TextBox>().OrderByDescending(x => x.Name).Take(3);
foreach (var item in todelete)
{
this.panel7.Controls.Remove(item);
}
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);
}
能否讲一下代码中的符号作用?
还是有点错误
错误 1 “string”不包含“StartWith”的定义,并且找不到可接受类型为“string”的第一个参数的扩展方法“StartWith”(是否缺少 using 指令或程序集引用?) F:\InformationSystem\InformationSystem\UILevel\AgrMain.cs 721 104 InformationSystem
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行开始删除!想对上面这代码作修改,但不知道从何入手,请朋友们指点!
=>
OrderBy(x => Convert.ToInt32(Regex.Match(x.Name, @"\d+").Value))因为按照字符排序 TextBox10 排在 TextBox9 前面。
然后再循环删除。
这方面知识一点不了解,期待你的指点!想来想去,还是只会用最笨的做法了。
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);
}
}
}