一个 Windows 表单需要访问另一个表单的组件。最简单的实现是什么?

One Windows Form needs an access to the components of another. What is the easiest implementation?

在我的项目中,我使用 C++/CLI 和 Windows Forms。我有两个表格。一个在main()

中执行
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew FormA); 

另一个 FormBFormA

的实例执行
FormB^ fb = gcnew FormB();
fb->Show();

我需要从 FormA 更改 FormB 的组件。通常它们位于 class FormB 的 private: 部分。除了简单地使它们全部 public 之外,有什么好的方法可以做到这一点吗?在本机 C++ 中,我会使用 friend class,但在 C++/CLI 中是不允许的。

虽然为 FormB 的成员提供 public 访问权限似乎是一种快速简便的解决方案,但我建议您在 FormB 上添加一些方法来执行上述操作。

这样,您可以从 FormA 调用这些方法,同时保留适当的封装。

希望对您有所帮助。

C++/CLI 具有本机 C++ 所没有的访问修饰符。您正在寻找 internal:

得益于 .NET 中对模块的强大支持。它比 friend 更广泛,但你很难保证无论谁在弄乱你的私处,都不会超过几个小隔间。访问 internal 成员的代码必须编译到同一个程序集中。所以您的 FormB class 必须与您的 FormA class 在同一个项目中。常见情况。

如果您需要跨模块的 friend 等价物,那么您需要 [InternalsVisibleTo] 属性。使用 public 属性 公开成员是另一种常见方式。