我正在创建一个具有以下目标的Windows窗体应用程序:
获取一个产品列表,每个产品都有一个唯一的名称和一个类别(来自枚举列表)来自用户(然后做一些事情,但这与问题无关)。
我的想法是让用户通过在文本框中输入值来指定他们想要配置“n”产品。我有文本框的事件处理程序调用一个方法,该方法将变量设置为此值n。这个值“n”将用作循环计数器,或者你拥有什么 - 重点是它将创建要创建的框数量的界限。
然后我想添加(动态地基于n),n个(文本框/组合框)对到表单。如果没有空间在最后一个创建的下面添加另一个(文本框/组合框)对,它应该创建另一个列。
n是无限制的,但实际上,可能永远不会超过20.无论如何,如果有更多的产品,我希望能够处理它。
组合框中的选项将从运行时传入的字符串列表中填充,但对于此表单应用程序的每个实例,每个框都是一致的。
我试图输入模拟图像但是堆栈溢出不会让我直到我获得一些声望点:(
我理解如何使用类似下面的代码创建一些盒子,但它更精确的点我坚持。有人可以帮忙吗?
谢谢!
` private void Method1()
{
int boxes = Int32.Parse(NumProducts.Text);
for (int i = 0; i < boxes; i++)
{
TextBox tb = new TextBox();
tb.Location = new System.Drawing.Point(40, i * 20);
tb.Name = "TextBoxName" + i.ToString();
tb.Size = new System.Drawing.Size(184, 20);
tb.TabIndex = i + 2;
tb.Text = String.Empty;
panel1.Controls.Add(tb);
}
}
private void NumProducts_TextChanged(object sender, EventArgs e)
{
Method1();
}`
答案 0 :(得分:0)
从可用性的角度来看,提前向用户询问行数并不是很好。
您应该创建一个界面,在用户输入内容时不断创建新框,或者通过在用户输入内容时激活“新行”行(不保存空行)或者通过一个“新行”按钮。
答案 1 :(得分:0)
要实现布局,请使用FlowLayoutPanel控件,并将控件添加到此处,而不是像您现在一样将其添加到面板中。这应该透明地处理列问题,如果用户超出预期的最大编辑框数,则添加滚动条。关于FlowLayoutPanel here(以及许多其他人)的一般信息。
答案 2 :(得分:0)
对我来说,像DataGridView这样的选择会更好。您可以使用DataGridViewTextBoxColumn作为第一列并使用DataGridViewComboBoxColumn作为第二列进行配置。它支持“新行”作为最后一项。
阅读文档。在表格上放一个并玩它。