我是 C# 新手,我在这里提问是因为我没有在 google 中找到解决方案搜索以及有关 SO 的其他问题,我将解释我的示例应用程序的作用:
当我运行它时,它默认显示一个带有文本框的表单,这个文本框总是会显示,输入一些文本并按回车键后,它将生成一个新的文本框和一个新的按钮(所有控件甚至默认文本框都是在面板内),并且新文本框具有与默认文本框相同的功能,当我单击其文本框旁边生成的按钮时,它会删除按钮本身和文本框,但之后如果我删除一些随机文本框,它会留下一个空格在这些控件之间,如何重新组织这些内容以使它们之间不留空间?
正如您在图片中看到的,您能告诉我如何解决此问题或给我实现此目标的建议吗?谢谢,顺便说一句,这是我用来生成按钮和文本框的方法
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
上。直接或组合在 Panel
或 UserControl
中。
将FlowLayoutPanel
的FlowDirection
属性设置为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/