c++ - 在 C++ 中将父窗体的引用传递给子 UserControl

标签 c++ wpf winforms visual-studio-2010

一段时间以来,我一直在尝试将父 Form1 的指针传递给子用户控件 oP2_settings

此时,我正在尝试实现基本设置功能的用户控件。其中一些需要与父元素(状态条、窗口标题等)交互。

我设法通过两者实现了这一点:

  • 将指针转发到 Form1 的用户控件构造函数中的“this”
  • 执行一个单独的 void 函数 setParent,该函数采用 Form1^ 的参数>

但是,我找不到任何不破坏设计器的解决方案。 例如,当我删除对 Form1 类的前向引用时,设计器可以正常工作,但编译器自然不会允许编译以未定义的标识符为由继续进行。

当我让程序运行时,设计器表现得很奇怪。根据情况,大约有 4 种不同的错误,从“无法在传递给事件绑定(bind)服务的对象上设置事件”“找不到方法”,或者偶尔是设计人员加载,但不是在适当的选项卡中显示用户控件,而是在两者中显示 Form1(用户控件作为单个元素)。

有什么方法可以让它在运行时/编译时和设计时都工作?每次我想编译/移动一个元素时,我都不想在我的行中注释和注释掉。

这是在 C++ Windows 窗体应用程序中,我使用的是 VS2010。

最佳答案

这是一个过于紧耦合的设计。您的用户控件离不开它的父控件。您应该使用事件而不是在父子之间传递引用。

如果您的用户控件发生变化并且父控件需要更新,则在用户控件中为此创建一个事件并触发它。父级依次为事件安装处理程序并执行适当的操作。

关于c++ - 在 C++ 中将父窗体的引用传递给子 UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23161443/

相关文章:

wpf - 将 WPF MediaElement 与 MKV 视频格式一起使用 - 无音频

c# - 为什么 System.Drawing.Color 将 'ff' 添加到十六进制代码中?

c# - "MouseUp"事件是否更改了 NumericUpDown 的值?

c# - 在 C# 和 WinForms 中将筛选框添加到 ListView 的列标题

c++ - 使用 abs() 避免编译器问题

c++ - Winsock2 recv() 挂接到远程进程

c++ - 获取类中的字段数

wpf - 为什么 ScrollViewer 中鼠标滚轮滚动消失了?

c++ - 在 C++ 中使用已删除的函数

c# - 在自定义 UserControl 上强制使用透明背景