2011年7月22日 星期五

C# 有 Lambda 真好用【二】

之前寫了一個設定 BindingSource.Filter 的程式,
在 Form 上面只要呼叫一個設定的函式,就可以讓 Form 上面的 Filter 功能有作用,呼叫的方法如下:
CommQueries.SetFilterFunc(this, BindingSource, 查詢按鈕, 清除查詢條件按鈕,
    new LookUpEdit[] { 查詢元件1, 查詢元件2, 查詢元件3, 查詢元件4 });



SetFilterFunc 的寫法如下:



public static void SetFilterFunc(Form frm, BindingSource bs, object filterButton,
    object clearButton, LookUpEdit[] filterControls)
{
    if (filterButton is SimpleButton)
    {
        ((SimpleButton)filterButton).Click += (s, e) => { DoFilter(frm, bs, filterControls); };
    }

    if (clearButton is SimpleButton)
    {
        ((SimpleButton)clearButton).Click += (s, e) => { DoClearFilter(frm, bs, filterControls); };
    }
}



這樣寫的好處是在 Click 的程式要呼叫 DoFilter 跟 DoClearFilter 的時候可以把那一堆查詢的元件傳進去,
我一開始並不是這樣寫的,那時候沒有想到可以用這一招,
所以傻傻的在 SetFilterFunc 的時候把 Form.Name 跟 filterControls 塞入 Dictionary 裡面去,
然後在 DoFilter 跟 DoClearFilter 的時候再去 Dictionary 裡面去把他們找出來,
然後才去處理我想要處理的事情,
這樣程式不只多了兩倍,也覺得寫得很煩!
後來改用 Lambda 的寫法之後,
程式真得是清爽很多丫!

沒有留言:

張貼留言