c# - 删除某些控件后如何删除(删除)文本框之间的空间?

标签 c# button textbox panel

我是 C# 新手,我在这里提问是因为我没有在 google 中找到解决方案搜索以及有关 SO 的其他问题,我将解释我的示例应用程序的作用:

当我运行它时,它默认显示一个带有文本框的表单,这个文本框总是会显示,输入一些文本并按回车键后,它将生成一个新的文本框和一个新的按钮(所有控件甚至默认文本框都是在面板内),并且新文本框具有与默认文本框相同的功能,当我单击其文本框旁边生成的按钮时,它会删除按钮本身和文本框,但之后如果我删除一些随机文本框,它会留下一个空格在这些控件之间,如何重新组织这些内容以使它们之间不留空间?

enter image description here

正如您在图片中看到的,您能告诉我如何解决此问题或给我实现此目标的建议吗?谢谢,顺便说一句,这是我用来生成按钮和文本框的方法

private void GenerarTextBox()
{
    panelContenedor.VerticalScroll.Value = panelContenedor.VerticalScroll.Minimum;

    TextBox tb = new TextBox();
    tb.Text = "Prueba " + id;
    tb.Name = "txtBox" + id;
    tb.KeyDown += new KeyEventHandler(TextBox_Keydown);

    Button bt = new Button();
    bt.Cursor = Cursors.Hand;
    bt.Text = "X";
    bt.Name = "btnPrueba" + id;
    bt.Click += new EventHandler(ClickBotones);

    Point p = new Point(20, 30 * id);
    Point pb = new Point(130, 30 * id);

    tb.Location = p;
    bt.Location = pb;

    panelContenedor.Controls.Add(tb);
    panelContenedor.Controls.Add(bt);

    tb.Focus();
    id++;
}

这是为了删除文本框和按钮

private void ClickBotones(object sender, EventArgs e)
{
    Button bt = sender as Button;

    string nombreBoton = bt.Name;
    string idBoton = nombreBoton.Substring(9);
    string nombreTextBox = "txtBox" + idBoton;

    foreach (Control item in panelContenedor.Controls.OfType<Control>())
    {
        if (item.Name == nombreTextBox)
        {
            panelContenedor.Controls.Remove(item);
            panelContenedor.Controls.Remove(bt);
        }
    }
}

最佳答案

您可以将动态控件放置在 FlowLayoutPanel 上。直接或组合在 PanelUserControl 中。

FlowLayoutPanelFlowDirection 属性设置为TopDown。然后,FlowLayoutPanel 将自动排列您的控件。您还可以将 WrapContents 属性设置为 False,并将 AutoScroll 设置为 true,以使滚动条出现。

或者,您可以使用 FlowDirection = LeftToRight,将文本框和按钮直接放在 FlowLayoutPanel 上,并让子控件换行( WrapContents = True)。在子控件中,出现一个新属性 FlowBreak。可以将其设置为 True 以使最后一个控件出现在一行中,并让下一个控件独立于 FlowLayoutPanel 的宽度换行。

您还可以使用子控件的 Margin 属性来控制它们在 FlowLayoutPanel 中的布局,因为 Location 属性变得无用。

FlowLayoutPanel(以及Panel)位于“容器”部分的工具箱中。

关于c# - 删除某些控件后如何删除(删除)文本框之间的空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52020164/

相关文章:

css - 网站相对于视口(viewport)宽度的定位

jquery - 使用 jQuery 获取文本框的值

c# - 序列化一个对象并反序列化为对象列表

c# - 这是设计模式吗?

css - 浏览器究竟是如何渲染一个 <button> 的?

css - ie/chrome 中的 formalize.css 按钮

java - 通过索引定位元素对于具有相似属性的元素不起作用

c# - 使用 wshttpbinding 和用户名身份验证保护服务时,WCF 服务显示异常

C# Winforms 如何在函数中更新 toolStrip

java - PrimeFaces: <p:dataTable> 内的 <p:inline> 在 ajax 调用时无法正常工作