C# 以编程方式创建表单

C# 以编程方式创建表单,c#,forms,winforms,C#,Forms,Winforms,我想构建一个程序来填充模板,将其保存为特定于应用程序的格式,并将其发送到远程服务器 将有多个模板,每个模板都有不同数量的字段要填充。此外,这些字段的人类可识别名称也将彼此不同 此外,该程序允许用户填写的模板类型在编程时不是固定的。用户认为必要时,将有其他模板 目前,我能够加载单个模板,解析它以查看需要填充的字段,从模拟数据填充它们并保存它们 如何在每次选择不同的模板时动态创建具有必要字段名的用户表单,以便用户可以手动输入数据?要在运行时创建表单,请执行以下操作: Form newForm = n

我想构建一个程序来填充模板,将其保存为特定于应用程序的格式,并将其发送到远程服务器

将有多个模板,每个模板都有不同数量的字段要填充。此外,这些字段的人类可识别名称也将彼此不同

此外,该程序允许用户填写的模板类型在编程时不是固定的。用户认为必要时,将有其他模板

目前,我能够加载单个模板,解析它以查看需要填充的字段,从模拟数据填充它们并保存它们


如何在每次选择不同的模板时动态创建具有必要字段名的用户表单,以便用户可以手动输入数据?

要在运行时创建表单,请执行以下操作:

Form newForm = new Form();
要向表单中添加控件,例如文本框,请执行以下操作:

TextBox text = new TextBox();

newForm.Controls.Add(text);
您还可以向其他容器添加控件,例如:

GroupBox groupBox = new GroupBox();

groupBox.Controls.Add(text);

newForm.Controls.Add(groupBox);

现在,groupbox将添加到包含文本框的表单中。

试试这个小程序:

var form = new Form();

var label = new Label() { Text = "Name", Location = new Point(10, 10), AutoSize = true };
var textbox = new TextBox() { Location = new Point(60, 10) };
var button = new Button() { Text = "Save", Location = new Point(10, 35) };

button.Click += (s, e) => MessageBox.Show("You typed " + textbox.Text);

form.Controls.AddRange(new Control[] { label, textbox, button });

form.Show();

看看表单自动生成的代码,没有什么可以阻止您手动执行所有这些操作。只需单击InitializeComponent()并在Visual Studio中单击F12即可。我不能静态执行此操作,必须在运行时执行此操作,因为用户可以创建自己的模板格式并将其加载到program@yasar-您当然可以在运行时执行Isma建议的操作。我可以使用每个字段名的循环来执行此操作,但是,当用户单击“生成”时,如何获取与字段对应的特定文本框?@yasar-如果在循环中执行此操作,则使用
for
循环和数组将文本框存储在数组中。@yasar必须为每个控件分配一个事件处理程序;由于事件处理程序对于所有的文本框都可能是相同的,因此在该方法中,您必须通过将
sender
参数转换为正确的类型(然后读取以前指定的名称或标记等属性)来了解谁是调用方@ccalboni-如果你正在创建像我回答中那样的事件,你不需要这样做。您可以忽略发送方并特别引用创建的控件。就像
文本框一样。文本
引用位于
按钮内。单击
处理程序。