Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未触发UserControl事件_C#_.net_Winforms - Fatal编程技术网

C# 未触发UserControl事件

C# 未触发UserControl事件,c#,.net,winforms,C#,.net,Winforms,我正在从事一个半专业项目,需要为我的一个模型定制一个视图。据我所知,这意味着创建一个UserControl继承类,如下所示: public partial class PopulationView : UserControl { ... } 现在这真是奇迹,我已经可以做我想做的几乎所有事情了,包括用onPaint定制绘画,但我注意到似乎没有任何事件发生。我必须附加多个事件侦听器,在所有实例中,我都返回到我的表单,并将事件侦听器添加到表单中自定义组件的实例中。例如,我想添加一个点击事件监

我正在从事一个半专业项目,需要为我的一个模型定制一个视图。据我所知,这意味着创建一个UserControl继承类,如下所示:

public partial class PopulationView : UserControl
{
    ...
}
现在这真是奇迹,我已经可以做我想做的几乎所有事情了,包括用onPaint定制绘画,但我注意到似乎没有任何事件发生。我必须附加多个事件侦听器,在所有实例中,我都返回到我的表单,并将事件侦听器添加到表单中自定义组件的实例中。例如,我想添加一个点击事件监听器。我首先尝试的是

public partial class PopulationView : UserControl
{
    private void PopulationView_Click(object sender, EventArgs e)
    {
        Debugger.Break();
    }
}
当然,通过PopulationView.cs[Design]将函数附加到Click事件。这不起作用,因此我在组件实例上添加了一个Click事件侦听器,并将PopulationView\u Click函数添加到我的表单MainForm.cs[Design]中,然后在控件上启动相应的函数

我觉得我遗漏了一件非常简单的事情,那就是阻止我直接在我的控制下注册事件,我非常感谢任何帮助。我翻遍了互联网,但找不到任何相关的东西

更新

有些评论让我觉得我应该提供更多关于我正在做什么的详细信息。设置有点复杂,但这里有一个总结:

我有一个从UserControl继承的自定义控件,称为PopulationView

我已将该控件的一个实例添加到窗体中

通过窗体的设计视图将事件监听器附加到窗体本身中的控件监听器实例上是可行的。在PopulationView中通过PopulationView的设计视图侦听器添加它们不起作用

复杂的是,我的表单中有一个BackgroundWorker,负责为PopulationView生成PopulationModel。一旦BackgroundWorker完成,它会使用BeginInvoke通知PopulationView是时候画图了


但是,即使在使用RunWorkerAsync触发BackgroundWorker之前,所有事件的行为方式都与所描述的相同。有可能它仍在干扰吗?

编辑PopulationView构造函数时,我意外删除了对InitializeComponent的调用,所有设计器代码都在该调用中。真傻。如果要使用设计器,请确保从构造函数中调用InitializeComponent。

您实际上在哪里?在用户控件区域或其中的其他子控件中?尝试添加此项。SetStyleControlStyles.StandardClick,true;如果单击控件本身,则返回构造函数。如果单击控件中的其他项,他们自己处理单击,你必须为控件中的项添加事件处理程序。我单击控件区域本身,它基本上是一个很大的图形区域,将单击侦听器添加到控件的窗体实例中效果很好-通过其设计视图将其添加到控件中不起作用。SetStyle也没用。这更像是一个旁注,但为什么你特别想抓住点击?除了特别像按钮的控件之外,它并不是真的那么有用。拦截用户控件中事件的常用方法是重写相关的OnXXX方法,而不仅仅是添加事件处理程序。但是事件处理程序确实应该仍然可以工作,所以你可能也在做一些奇怪的事情。@Luaan-是的,我觉得我在做一些奇怪的事情,让它无法工作,这就是我为什么要问的原因。我有一个很大的区域,我在其中画了一堆东西,我想对点击做出反应,找出点击的坐标,然后根据这个坐标改变视图。我可以使用儿童控制,但我认为这还不够复杂。我是从UserControl继承的,所以AddingOnClick似乎没有做任何事情来覆盖我猜?