2014-01-07 41 views
1

我在用戶控件(SearchControl)這樣創造了一個新的事件:這是引發上雙擊或輸入添加事件,表單設計文件

//事件

public event EditRecordEventHandler EditRecord; 
public delegate void EditRecordEventHandler(object sender, EventArgs e); 

// Supressing的事件

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的值是每次空。

爲了解決這個問題,我檢查了具有SearchControl的Main Control的設計器文件,並且無法在此找到EditRecord Event條目。所以,我手動創建這樣的:

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

現在的東西都工作正常,但我的問題是,爲什麼沒有在第一位置自動創建呢?據我所知,不建議手動添加任何東西到設計器文件..有沒有其他辦法可以做到這一點?

謝謝

+0

你的意思是「自動創建它」?如果您需要特定的事件,則可以通過IDE設計器或代碼將其明確綁定。您可以在onload或init事件中將事件處理程序綁定在代碼隱藏中,而不是在designer.cs文件中 – Kelmen

回答

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. 

}

1

當您創建活動它有類似於你如何使用MouseDoubleClick面向網格窗體設計器中使用(所以您需要在其他類別中找到事件,因爲您沒有定義CategoryAttribute,在那裏雙擊等)。

如果我理解它,那麼您希望在創建表單時自動訂閱事件。您可以在控件構造函數中執行此操作(查找父表單control.Parentcontrol.FindForm()),或者使用特殊的方法,您必須從窗體構造函數中調用,這又基本類似於手動佈線事件(您在設計器中執行的操作但是,相反,你可以在窗體文件中完成,這完全是ok來編輯)由你決定。