【发布时间】:2014-01-24 20:08:49
【问题描述】:
我在我的用户控件 (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);
现在一切正常,但我的问题是为什么它一开始没有自动创建它?据我所知,不建议手动将任何内容添加到设计器文件中。还有其他方法可以做到吗?
谢谢
【问题讨论】:
-
你的意思是“自动创建”?如果您需要特定事件,则通过 IDE 设计器或代码显式绑定它。您可以在 onload 或 init 事件期间在代码隐藏中绑定事件处理程序,而不是在 Designer.cs 文件中
标签: c# visual-studio-2010 events data-binding user-controls