WinForm+C#小案例--->通过代码动态实现在WinForm窗体中添加和删除文本输入框

ModelEngine·创作计划征文活动 10w+人浏览 1.7k人参与

通过代码动态实现在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) 不变即可
            }
        }
    }
}

希望对大家有所帮助。感谢大家的关注和点赞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值