将事件添加到表单设计器文件

时间:2014-01-07 07:58:27

标签: c# visual-studio-2010 events data-binding user-controls

我在我的用户控件(SearchControl)中创建了一个新事件,如下所示:

//双击或输入

时触发的事件
public event EditRecordEventHandler EditRecord;
public delegate void EditRecordEventHandler(object sender, EventArgs e);

//压制事件

private bool _raiseEvents = true;
private void OnEditRecord(System.EventArgs e)
{
     if (_raiseEvents)
     {
        if (this.SearchResultGridView.FocusedRowHandle > -1)
         {
            if (EditRecord != null)
            {
                EditRecord(this, e);
             }
          }
      }
}

现在,当用户双击网格中的一行时,将调用此事件。因此,从属性窗口中,我选择了网格视图的MouseDoubleClick事件,并调用了上面创建的EditRecord事件。

private void SearchResultListGridControl_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            // Check whether the user clicked on a real and not a header row or group row
            DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo info = SearchResultGridView.CalcHitInfo(e.Location);
            if (info.InRow && !SearchResultGridView.IsGroupRow(info.RowHandle))
            {
                OnEditRecord(e);
            }

        }

现在我面临的问题是,每当我双击网格视图中的一行时,它会调用SearchResultListGridControl_MouseDoubleClick(),然后调用OnEditRecord(),但EditRecord的值每次都为null。

为了解决这个问题,我检查了具有SearchControl的主控制器的设计器文件,但在此中找不到EditRecord事件条目。所以我手动创建它:

this.MySearchControl.EditRecord += new performis.BA.Merkmalsleisten.Search.SearchControl.EditRecordEventHandle(this.MySearchControl_EditRecord);

现在一切正常,但我的问题是它为什么不首先自动创建它?到目前为止,我知道不建议手动将任何东西添加到设计器文件中。还有其他任何方法可以做到吗?

由于

2 个答案:

答案 0 :(得分:1)

当您创建事件时,必须在表单设计器中使用它,类似于您使用MouseDoubleClick进行网格的方式(因此您需要在 Misc 类别中查找事件,因为你没有定义CategoryAttribute,双击那里等等。)

如果我理解正确您想要自动订阅活动,那么在创建表单时。您可以在控件构造函数(查找父窗体control.Parentcontrol.FindForm())中执行此操作,也可以在特殊方法中执行此操作,您必须从窗体构造函数调用它,而这种方法基本上类似于布线事件手动(你在设计师创建的文件中做了,但是,你可以在表单文件中完成,完全 ok 进行编辑)直到你。

答案 1 :(得分:0)

不确定。 更好的做法是添加绑定线:
this.MySearchControl.EditRecord += new performis.BA.Merkmalsleisten.Search.SearchControl.EditRecordEventHandle(this.MySearchControl_EditRecord);

到表单的构造函数。类似的东西:

公共MyForm() {

this.MySearchControl.EditRecord += new performis.BA.Merkmalsleisten.Search.SearchControl.EditRecordEventHandle(this.MySearchControl_EditRecord);
//The rest of your constructor.

}