从基础 .NET 动态添加控件

Dynamically add control from base .NET

有一种方法可以通过代码向 WinForm 添加控件。比较简单,例如:

Button ^btn = gcnew Button;

btn->Size.Width = 70;
btn->Size.Height = 30;
btn->Text = "test button";

this->Controls->Add(btn);

我们有一个按钮。但是当它们有很多控件和很多参数时,代码就会变得太大。

我曾经使用一个 IDE 工作,它有一个很好的功能:你可以在普通设计器中创建任何类型的控件并为它们设置任何首选项和方法,但它们存储在一个特殊的基础中,你可以在代码中连接并从中获取任何预先设置的控件。

Visual Studio中有这样的东西吗?

经过一段时间的思考并感谢 Sergey Schevchenko 的建议,我设法创建了与我想要的有点相似的东西。 创建 UserControl 或只是另一种形式并没有太大区别。所以两种方法我都试过了。

所以我创建了另一个表单(或 UserControl - 相同的东西),名为 "my_controls_form.h",带有多个控件。重点是制作这些控件 public 以便您可以从其他表单访问它们。

当设计师创建它们时,默认设置如下:

private: System::Windows::Forms::Button^ my_button_btn;
private: System::Windows::Forms::Label^ my_label_lbl;

所以我将 private 更改为 public,在主窗体 .cpp 中包含了这个新窗体 header (#include "my_controls_form.h") 然后像这样将它们添加到我的主窗体中:

my_controls_form ^frm = gcnew my_controls_form;
Button ^btn = frm->my_button_btn;
Label ^lbl = frm->my_label_lbl;

btn->Name = "__my_button";
btn->Location = Point(0,70);

lbl->Name = "__my_lalbel";
lbl->Location = Point(70,70);

this->Controls->Add(btn);
this->Controls->Add(lbl);

我对这种方式还是有些疑惑。例如,这些控件的所有方法都写在另一个 class(形式)中。 并且多次插入控件时出现问题...如何插入几个相同的控件有什么想法吗? 还有什么可能出错