通过代码动态实现在WinForm窗体中添加和删除文本输入框
实现这个案例我们可以分为2个步骤
效果演示:

步骤 1:创建 Winform 项目并设计界面

步骤 2:编写代码实现切换逻辑
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace 通过代码动态实现在WinForm窗体中添加和删除文本输入框
{
public partial class Form1 : Form
{
// 声明一个List集合,专门用于存储所有动态创建的TextBox控件的引用
// 这样做可以方便后续对这些控件进行管理,比如删除
private List<TextBox> textBoxes = new List<TextBox>();
// 用于记录当前控件应该放置在哪一行
private int row = 1;
// 用于记录当前控件应该放置在哪一列
private int col = 1;
public Form1()
{
InitializeComponent();
}
//添加按钮的点击事件处理器
private void button1_Click(object sender, EventArgs e)
{
// 1. 创建一个新的TextBox控件实例
TextBox txt = new TextBox();
// 2. 设置文本框的大小(宽度100像素,高度20像素)
txt.Size = new Size(100, 20);
// 3. 计算新文本框的位置
// 逻辑是:一行最多放6个,超过6个就自动换行
// textBoxes.Count 代表已经创建的文本框总数
if (textBoxes.Count % 6 != 0)
{
// 如果不是6的倍数,说明还能放在当前行
// 水平位置 = (当前列数 - 1) * 控件宽度
// 垂直位置 = 当前行数 * 控件高度
txt.Location = new Point((col - 1) * 100, 20 * row);
// 当前列数加1,为下一个控件做准备
col++;
}
else
{
// 如果是6的倍数(如第6个、第12个...),说明需要换行
row++; // 行数加1,换到下一行
col = 1; // 列数重置为1,从新行的第一列开始
txt.Location = new Point((col - 1) * 100, 20 * row); // 计算新位置
col++; // 列数加1,为下一个控件做准备
}
// 4. 将新创建的TextBox添加到List集合中,以便后续管理
textBoxes.Add(txt);
// 5. 将新创建的TextBox控件添加到窗体的Controls集合中
// 只有这样,文本框才能在窗体上显示出来并被窗体管理
this.Controls.Add(txt);
}
// 删除按钮的点击事件处理器
private void button2_Click(object sender, EventArgs e)
{
// 1. 检查是否还有可以删除的文本框
if (textBoxes.Count > 0)
{
// 2. 获取最后一个创建的TextBox控件
TextBox lastTxt = textBoxes[textBoxes.Count - 1];
// 3. 从List集合中移除对该控件的引用
textBoxes.Remove(lastTxt);
// 4. 从窗体的Controls集合中移除该控件
// 这样,该控件就会从窗体上消失并被销毁
this.Controls.Remove(lastTxt);
// 5. 调整行列计数器,以保证下次添加时布局正确
if (col > 1)
{
// 如果当前列数大于1,说明上一个控件不在行首,只需将列数减1
col--;
}
else if (row > 1)
{
// 如果当前列数是1(说明刚删除的是某一行的第一个控件),并且行数大于1
// 则需要换行,并将列数设置为6(因为上一行是满的)
row--;
col = 6;
}
// 如果 row == 1 且 col == 1,说明所有控件都删光了,保持 (1, 1) 不变即可
}
}
}
}
希望对大家有所帮助。感谢大家的关注和点赞。
2771

被折叠的 条评论
为什么被折叠?



