0

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

3 回答 3

0

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

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

于 2012-05-02T16:29:07.533 回答
0

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

于 2012-05-02T16:36:21.553 回答
0

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

阅读文档。将一个放在表格上并使用它。

于 2012-05-02T16:37:32.293 回答