【发布时间】:2020-01-16 18:32:19
【问题描述】:
尝试让事件处理程序运行,但更重要的是,了解这些事情背后的语法。下面的代码编译,我可以在 Form1 中看到我的 DataGrid“SemesterView”,但是当我点击一个单元格时,当我输入控件 SemesterView 时没有触发任何事件,nuthin。我做错了什么?我已经玩过其他事件,以防我误解了“Enter”但仍然没有。
form1代码内
SemesterView semesterView;
semesterView = new SemesterView();
this.Controls.Add(semesterView);
semesterView.Enter += new SemesterView.EventHandler(semesterView.MyEvent1);
在 SemesterView 类中
class SemesterView : DataGridView
{
public delegate void EventHandler(string p);
public event EventHandler Enter;
public SemesterView()
{// code to create columns rows etc}
public void MyEvent1(string p)
{ MessageBox.Show("event 1 works");}
}
【问题讨论】:
-
您的活动必须具有正确的参数。
public void MyEvent(object sender, System.EventArgs e)它查找具有此签名的方法。如果找不到,则什么都不会发生。 -
由于您继承
DataGridView,因此在添加列/行之后,在构造函数中附加事件。期望消费者附加事件处理程序会破坏封装。 -
@madreflection 我同意,做出这样的改变并不能解决问题,看来
-
不,绝对不是。这只是一个评论说明。乔希和乔 H 有你的解决方案。
-
@Josh,将这些参数添加到 MyEvent1 会导致编译器抱怨“MyEvent1 没有重载匹配委托 SemesterView.EventHandler”,即使我删除了“字符串 p”参数
标签: c# .net winforms event-handling