动态添加带有相应组合框的文本框

时间:2012-05-02 16:25:00

标签: c# winforms dynamic custom-controls add

我正在创建一个具有以下目标的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();
        }`

3 个答案:

答案 0 :(得分:0)

从可用性的角度来看,提前向用户询问行数并不是很好。

您应该创建一个界面,在用户输入内容时不断创建新框,或者通过在用户输入内容时激活“新行”行(不保存空行)或者通过一个“新行”按钮。

答案 1 :(得分:0)

要实现布局,请使用FlowLayoutPanel控件,并将控件添加到此处,而不是像您现在一样将其添加到面板中。这应该透明地处理列问题,如果用户超出预期的最大编辑框数,则添加滚动条。关于FlowLayoutPanel here(以及许多其他人)的一般信息。

答案 2 :(得分:0)

对我来说,像DataGridView这样的选择会更好。您可以使用DataGridViewTextBoxColumn作为第一列并使用DataGridViewComboBoxColumn作为第二列进行配置。它支持“新行”作为最后一项。

阅读文档。在表格上放一个并玩它。