【发布时间】:2013-09-21 19:33:33
【问题描述】:
我正在使用 c# 构建一个 windows 窗体应用程序,我构建了许多自定义用户控件,我的 GUI 是这些用户控件的组合,问题是当我从主窗体为此用户控件设置事件时,该事件没有火,但是如果我从它自己的控件中设置该事件并将该控件内的所有项目的事件处理程序设置为该事件处理程序它工作正常,并且我已经包装了控件,我应该深入设置事件和事件处理程序,实际上这将花费更多的开销“我不想要它”。 例如:
在主窗体中,我可以控制他的名字“病人”,这是用户控制.. 如果我从主窗体设置此控件的单击事件,它将不会触发
但是,如果我去耐心的用户控件定义并定义自定义事件和事件处理程序,一切都很好
public event EventHandler PatientCliecked;
private void PatientClicked()
{
if (this.PatientCliecked != null)
this.PatientCliecked(new object(), new EventArgs());
}
private void ProcessPatientClickedEvent(object sender, EventArgs e)
{
PatientClicked();
}
我的问题是,有没有其他方法可以做到这一点,或者这就是 .NET 的逻辑??
【问题讨论】:
-
if I set the click event for this control from the main form it will not fire---> 你能说得清楚点吗?你是怎么做到的,有代码吗? -
因此,为了避免在类中违反名称唯一性,您实际上将事件命名为
PatientCli**e**cked?这是不行的,因为人们会变得恶心和晕船。您应该使用英语后缀或前缀,例如:event EventHandler PatientClicked而不是private void RaisePatientClicked() -
在主要形式例如:
Patient MyPatient = new Patient(); MtPatient.click += PatientClickHandler; private void PatientClichHandler(object sender,EventArgs e) { // Code }@EduardDumitru ..我的问题不在于名称,我与他们没有任何冲突 -
谁在调用
ProcessPatientClickedEvent方法?这是您问题的一个关键方面,如果没有这些信息,我们无法猜测您面临的真正问题。请确认我做对了:您想完全跳过写在您问题正文中的 C# 代码行吗?我做对了吗? -
ProcessPatientClickedEvent 将由具有患者用户控件的各个控件调用,例如,如果我在患者用户控件上有一个按钮,则此按钮的单击事件处理程序是 ProcessPatientClickedEvent 方法,我面临的是如果我没有在 Patient 用户控件中实现事件和事件处理程序,并且我为 Patient 用户控件中的每个单独控件设置 click 事件处理程序,它将不会触发,并且如果我为整个控件设置 click 事件处理程序它不会触发的主要形式。为什么点击事件不由它自己触发?
标签: c# .net events event-handling