【问题标题】:Add text box with corresponding combo box dynamically动态添加带有相应组合框的文本框
【发布时间】:2012-05-02 16:24:59
【问题描述】:

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

【问题讨论】:

    标签: c# winforms dynamic custom-controls add


    【解决方案1】:

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

    阅读文档。将一个放在表单上并进行操作。

    【讨论】:

    • 感谢您的回答。正如你所说,我最终找到了 DataGridView,并从用户输入值创建行 - 然后我阅读了你的帖子并意识到,一旦我在表中的最后一行输入一个值,它就会弹出另一个“新”行。就像我一样想太多!
    • 抱歉,我应该更清楚地说明,使用 DGV 允许用户添加任意​​数量的项目,而无需事先指定。这正是我选择 DGV 作为此类功能的 UI 机制的原因。
    【解决方案2】:

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

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

    【讨论】:

    • 好点!谢谢!原来数据网格视图已经这样做了。
    【解决方案3】:

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

    【讨论】:

    • 滚动条,真不敢相信我的想法。搞定了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2018-12-22
    相关资源
    最近更新 更多