国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

認識.NET Framework事件處理

2024-07-10 12:56:07
字體:
來源:轉載
供稿:網友

最近的開發中在用datagrid 類 (system.windows.forms),發現單擊列標題會按該列對表數據進行排序,非常方便,可是有時候用戶又想按初始的數據排序查看,那怎么辦?

首先介紹兩個需要了解的小知識:
1、datagrid.allowsorting 屬性
獲取或設置一個值,該值指示是否可以通過單擊列標頭對網格進行重新排序。
2、datagrid.hittesttype 枚舉
指定 system.windows.forms.datagrid 控件中用戶單擊的部分。
其中:none 表示當控件不包含表,或者包含的行很少時,或者當表滾動到其底部時可見的背景區域。

而當用戶單擊行標題之上,列標題之右的小矩形區域時,得到的hittesttype值也是none

所以我們可以在判斷到用戶單擊none區域時,設置datagrid對象的allowsorting屬性,使表格數據恢復初始排序。

程序非常簡單,在datagrid對象的mousedown事件中加入以下即可
 datagrid dg = (datagrid) sender;
 datagrid.hittestinfo hit = dg.hittest(e.x, e.y);
 if ( hit.type.equals(datagrid.hittesttype.none) )
 {
  dg.allowsorting = false;
  dg.allowsorting = true;
 }


這與.net framework的事件處理有什么關系呢?
如果我想創建一個由datagrid派生的類,同時實現剛才的功能,就需要重載datagrid類的某個方法,由此我們進入主題。

在c#中,可重載的事件方法名稱皆以“on”開頭,且被聲明為“virtual”,一個被聲明成virtual的方法,就代表它可被重載。

重載事件方法,
事件方法會引發事件,
引發事件會調用事件處理程序
關于引發事件詳細信息,請參見引發事件

我相中了onmousedown事件方法,因為是它引發 mousedown 事件。有了思路,程序是簡單的,如下:

using system;
using system.windows.forms;

namespace myextend
{
 public class exdatagrid : datagrid
 {
  protected override void onmousedown(mouseeventargs e)
  {
   datagrid.hittestinfo hit = this.hittest(e.x, e.y);
   if ( hit.type.equals(datagrid.hittesttype.none) )
   {
    this.allowsorting = false;
    this.allowsorting = true;
   }
   base.onmousedown(e);
  }
 }
}

注意最后一句 base.onmousedown(e);
重寫派生類中的 onmousedown 時,請確保調用基類的 onmousedown 方法。

下次再用datagrid時,就可以通過exdatagrid類來實現了,如下:

using myextend;

 exdatagrid dg = new  exdatagrid();


好了,寫到這里應該算是達到了我的目的,更多的知識可以訪問msdn library,真的非常詳細

參考資料:中文msdn library  英文library
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤峰县| 浏阳市| 双城市| 阿拉善盟| 高淳县| 玉树县| 泰宁县| 瑞安市| 西乌珠穆沁旗| 鸡泽县| 尉犁县| 黔江区| 江都市| 基隆市| 新民市| 全州县| 临西县| 饶河县| 乌拉特前旗| 封丘县| 黄梅县| 西林县| 康马县| 肥东县| 天柱县| 广饶县| 桃源县| 宜昌市| 东城区| 辰溪县| 根河市| 宁化县| 金塔县| 呼伦贝尔市| 梅州市| 襄城县| 巴彦县| 陕西省| 新巴尔虎左旗| 崇信县| 凌云县|