我正在开发一个半专业项目,需要为我的一个模型提供自定义视图。据我所知,这意味着创建一个UserControl继承的类,如下所示:
public partial class PopulationView : UserControl
{
...
}
现在这可以创造奇迹,而且我已经能够完成我想要的所有内容,包括使用onPaint进行自定义绘画,但我注意到没有任何事件似乎正在注册。我必须附加多个事件监听器,并且在所有实例中,我最终返回到我的表单并向表单中的自定义组件实例添加事件监听器。例如,我想添加一个Click事件监听器。我首先尝试的只是
public partial class PopulationView : UserControl
{
private void PopulationView_Click(object sender, EventArgs e)
{
Debugger.Break();
}
}
当然通过 PopulationView.cs [Design] 将函数附加到Click事件。这不起作用所以我最终在组件的实例上添加了一个Click事件监听器,并将PopulationView_Click
函数添加到我的表单( MainForm.cs [Design] )而不是启动对控件的适当功能。
我觉得我错过了一些非常简单的东西,这使我无法直接在我的控件中注册事件,我很感激任何帮助。我在互联网周围挖掘但找不到任何相关内容。
更新
有些评论让我觉得我应该提供更多有关我正在做的事情的详细信息。设置有点复杂,但这是一个总结:
我有一个继承自UserControl的自定义控件,名为PopulationView
我将该控件的实例添加到表单
通过窗体的设计视图将事件侦听器附加到控件的实例(窗体本身的监听器)可以工作。通过PopulationView的设计视图(PopulationView中的监听器)添加它们不会。
让事情变得复杂的是我在我的表单中有一个BackgroundWorker,它负责为PopulationView生成PopulationModel。完成BackgroundWorker后,它使用BeginInvoke告诉PopulationView它是时候绘制。
但是,即使在使用RunWorkerAsync触发BackgroundWorker之前,所有事件的行为都与描述的方式相同。它有可能还在干扰吗?
答案 0 :(得分:0)
编辑PopulationView构造函数时,我不小心删除了对InitializeComponent()的调用,其中所有的Designer代码都是。傻,真的。如果您曾经使用过Designer,请确保从构造函数中调用InitializeComponent。