熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

認識.NET Framework事件處理

2013-11-13 09:43:46  來源: .NET編程 

  最近的開發中在用DataGrid 類 (SystemWindowsForms)發現單擊列標題會按該列對表數據進行排序非常方便可是有時候用戶又想按初始的數據排序查看那怎麼辦?
  
  首先介紹兩個需要了解的小知識
  DataGridAllowSorting 屬性
  獲取或設置一個值該值指示是否可以通過單擊列標頭對網格進行重新排序
  DataGridHitTestType 枚舉
  指定 SystemWindowsFormsDataGrid 控件中用戶單擊的部分
  其中None 表示當控件不包含表或者包含的行很少時或者當表滾動到其底部時可見的背景區域
  
  而當用戶單擊行標題之上列標題之右的小矩形區域時得到的HitTestType值也是None
  
  所以我們可以在判斷到用戶單擊None區域時設置DataGrid對象的AllowSorting屬性使表格數據恢復初始排序
  
  程序非常簡單在DataGrid對象的MouseDown事件中加入以下即可
  DataGrid dg = (DataGrid) sender;
  DataGridHitTestInfo hit = dgHitTest(eX eY);
  if ( hitTypeEquals(DataGridHitTestTypeNone) )
  {
  dgAllowSorting = false;
  dgAllowSorting = true;
  }
  
  這與NET Framework的事件處理有什麼關系呢?
  如果我想創建一個由DataGrid派生的類同時實現剛才的功能就需要重載DataGrid類的某個方法由此我們進入主題
  
  在C#中可重載的事件方法名稱皆以On開頭且被聲明為virtual一個被聲明成virtual的方法就代表它可被重載
  
  重載事件方法
  事件方法會引發事件
  引發事件會調用事件處理程序
  關於引發事件詳細信息請參見引發事件
  
  我相中了OnMouseDown事件方法因為是它引發 MouseDown 事件有了思路程序是簡單的如下
  
  using System;
  using SystemWindowsForms;
  
  namespace MyExtend
  {
  public class ExDataGrid : DataGrid
  {
  protected override void OnMouseDown(MouseEventArgs e)
  {
  DataGridHitTestInfo hit = thisHitTest(eX eY);
  if ( hitTypeEquals(DataGridHitTestTypeNone) )
  {
  thisAllowSorting = false;
  thisAllowSorting = true;
  }
  baseOnMouseDown(e);
  }
  }
  }
  
  注意最後一句 baseOnMouseDown(e);
  重寫派生類中的 OnMouseDown 時請確保調用基類的 OnMouseDown 方法
  
  下次再用DataGrid時就可以通過ExDataGrid類來實現了如下
  
  using MyExtend;
  
  ExDataGrid dg = new ExDataGrid();
From:http://tw.wingwit.com/Article/program/net/201311/11435.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.