我试图在后面的代码中创建一个用户控件,然后响应该控件中的事件。大概是因为在编译时控件不存在,Visual Studio 无法编译我创建的用于捕获控件事件的处理程序子例程。重要的是,我想在运行时决定控件的类型(这就是为什么我不只是对其进行硬编码)。
[在继续之前,控件正常工作,包括以“正常”方式在 XAML 中创建控件时使用的事件和事件处理程序。我想在后面的代码中创建控件实例,这样我就可以避免复制 99% 相同的页面]
这“有效”(但没有给我所需的灵活性):
Public WithEvents AnswerPanel As MyControls.ScrollerControl
...(以及 New() 子中的初始化):
AnswerPanel = New MyControls.ScrollerControl
ItemStack3.Children.Add(AnswerPanel)
AddHandler AnswerPanel.GuessMade, AddressOf CheckAnswer
...(这是响应 ScrollerControl 中的自定义事件的处理程序子)
Public Sub CheckAnswer(answer As String) Handles AnswerPanel.GuessMade
使用上面的代码,一切都按我的预期工作:控件是在运行时创建的,并且它的事件得到了正确处理。
我想要实现的是能够在初始化控件时选择不同的用户控件(例如 ScrollerControl2、ScrollerControl3 等)。我可以通过将第一行更改为:
Public WithEvents AnswerPanel As UserControl
但是一旦进行了更改,我就不能再在我的处理程序中引用自定义事件,因为(可能)编译器将其视为通用 UserControl,它不包括我的自定义 GuessMade 事件。事件名称上的编译器错误并告诉我它不存在。
我确定我在这里做错了什么。我认为这是一个理论/概念问题,而不是我的代码。
我是在正确的轨道上还是以错误的方式去做这件事?