2017.11.14 語言集成查詢、AppCan、C# 匿名方法 、Python和C# CheckBox控件

第一組: 姚成棟 語言集成查詢

  1. LINQ(Language Integrated Query)語言集成查詢是一組用于c#和Visual Basic語言的擴展。它允許編寫C#或者Visual Basic代碼以查詢數據庫相同的方式操作內存數據。

  2. LINQ的關鍵詞:from, select, in, where, group by, orderby, …

  3. LINQ的寫法:

  • from 臨時變量 in 實現IEnumerable<T>接口的對象
    where條件表達式
    [order by 條件]
    [group by 條件]
    select 臨時變量中被查詢的值

  • 實現IEnumerable<T>接口的對象.LINQ方法名(lambda表達式)。如:
    string input = "hello world";
    int count = input.Count(w=>w == 'o'); //查詢字母o出現的次數

  1. 遇到的實例:
  • 查詢條件


    image.png
  • l通過p_code等進行分組


    image.png
  • 進行求和


    image.png
  1. 總結:
    簡言之,今天偶爾遇到需要加和一組list中姓名相同的人的時間,一開始用兩個for循環,頭都繞暈了。然后用了LINQ,直接按照P_Code分組,直接用sum函數進行加和,很方便。

第二組 趙彩鳳 AppCan

1. AppCan 頁面跳轉
  appcan.window.open({
            name : 'FreeAlert',
            dataType : 0,
            aniId : 5,
            data : "FreeAlert.html"
        });//實現頁面跳轉

        appcan.window.evaluateScript({
            name : 'FreeAlert',
            scriptContent : 'reSet()'
        });//實現跳轉頁面中的該方法

2. AppCan 常用控件使用
  • Radio

Html:

<div class="radiobox umar-r" name=""><input type="radio"
class="uabs ub-con" name="lv_radio_0>"></div>

JS:

$('.radiobox').find('input').on('change',function(evt){
/*添加Radio變更處理代碼*/
});
取到選中值:
$("input[name=XXX]:checked").val();
  • CheckBox

Html:

<div class="checkbox umar-r"><input type="checkbox" 
class="uabs ub-con" ></div>

JS:

$('.checkbox').find('input').on('change',function(evt){
/*添加Checkbox變更處理代碼*/
});
手動選中:
 $(".XX").attr("checked", "checked");
判斷是否選中:
$(this).is(':checked')
取到一組CheckBox的選中值:
    var id_array = new Array();
        $('input[name="refund"]:checked').each(function() {
            id_array.push($(this).val());
        });
  • Select下拉框

Html:

<div class="select uba bc-border bc-text">
  <div class="text">
      請選擇
  </div>
  <div class="icon"></div>
  <select selectedindex="0">
      <option value=0>選項一</option>
      <option value=1>選項二</option>
      <option value=2>選項三</option>
      <option value=3>選項四</option>
  </select>
</div>

JS:

appcan.select(".select",function(ele,value){
console.log(value);
});
手動觸發選中:
$('.select select').val('2');
$('.select select').trigger('change');
  • Tab選項卡

JS:

var tabview_Tab = appcan.tab({
    selector : $("#Tab"),
    hasIcon : true,
    hasAnim : false,
    hasLabel : true,
    hasBadge : false,
    index : 0,
    data : [{
        label : "優免票申請",
        //icon : "fa-home"
    }, {
        label : "訂單查詢",
        //icon : "fa-user"
    }, {
        label : "我的信息",
        //icon : "fa-user"
    }]
});
tabview_Tab.on('click', function(obj, index) {
    $('.tab_pane').removeClass('active');
    $($('.tab_pane')[index]).addClass('active');
    $('.header').addClass('uhide');
            $($('.header')[index]).removeClass('uhide');
})

 TAB條目切換調用此方法
moveTo(index)
3. 控件屬性與class
 $('#XXX').addClass('active');
 $('#XXX').removeClass('active');

$('#XXX').attr(“disable”,true);
$('#XXX').removeAttr(“disable”);
//按鈕取消禁用時,移除disable屬性!只要有disable屬性,即為禁用
4. 彈框
    appcan.window.alert({
        title : "提示",
        content : "XXXXX?",
        buttons : ['確定', '取消'],
        callback : function(err, data, dataType, optId) {
            console.log(err, data, dataType, optId);
          }
});
5. 時間差
    var mydate = new Date();
    var str = "" + mydate.getFullYear();
    var mm = mydate.getMonth() + 1
    if (mydate.getMonth() > 9) {
        str += '-' + mm;
    } else {
        str += '-' + "0" + mm;
    }
    if (mydate.getDate() > 9) {
        str += '-' + mydate.getDate();
    } else {
        str += '-' + "0" + mydate.getDate();
    }
var nowDate = str;
var HireDate = hDate.substring(0, 10);
    var OneMonth = nowDate.substring(5, nowDate.lastIndexOf('-'));
    var OneDay = nowDate.substring(nowDate.length, nowDate.lastIndexOf('-') + 1);
    var OneYear = nowDate.substring(0, nowDate.indexOf('-'));


    var TwoMonth = HireDate.substring(5, HireDate.lastIndexOf('-'));
    var TwoDay = HireDate.substring(HireDate.length, HireDate.lastIndexOf('-') + 1);
    var TwoYear = HireDate.substring(0, HireDate.indexOf('-'));

var cha = Math.abs((Date.parse(OneMonth + '/' + OneDay + '/' + OneYear) - 
Date.parse(TwoMonth + '/' + TwoDay + '/' + TwoYear)) / 86400000);//相差天數

第3組:吳景霞 C# 匿名方法 lambda表達式

1. 數組中的元素能夠以字母或數字順序進行升序或降序排序。orderBy:升序排
image.png
2. C# 匿名方法

匿名方法(Anonymous methods) 提供了一種傳遞代碼塊作為委托參數的技術。匿名方法是沒有名稱只有主體的方法。匿名方法是通過使用 delegate 關鍵字創建委托實例來聲明的。

如果方法只被調用一次-----初始化委托。在這種情況下,就沒有必要創建獨立的具名方法。這時候,匿名方法允許我們避免使用獨立的具名方法。

匿名方法不會顯示聲明返回值。然而,實現代碼本身的行為必須通過返回一個在類型上與委托的返回類型相同的值來匹配委托的返回類型。

匿名方法是在初始化委托時內聯聲明的方法。

在如下地方使用匿名方法:

  • 聲明委托變量時作為初始化表達式;
  • 組合委托時在賦值語句的右邊;
  • 為委托增加事件時在賦值語句的右邊。


    image.png
image.png
3. lambda表達式

C#2.0引入了匿名方法,C#3.0引入了lambda表達式方法,簡化了匿名方法的語法。通過以下步驟把匿名方法轉化為lambda表達式。

  • 刪除delegate關鍵字;
  • 在參數列表和匿名方法主體之間放lambda運算符=>,讀作“goes to”


    image.png
image.png
image.png

第4組:張元一 Python 中的 if name == 'main' 該如何理解

1. 程序入口

對于很多編程語言來說,程序都必須要有一個入口,也就是程序的運行會從 MAIN 函數開始。同樣,JAVA 和 C# 必須要有一個包含 MAIN 方法的主類來作為程序入口。

而 PYTHON 則有不同,它屬于腳本語言,不像編譯型語言那樣先將程序編譯成二進制再運行,而是動態的逐行解釋運行。也就是從腳本第一行開始運行,沒有統一的入口。

一個 PYTHON 源碼文件除了可以被直接運行外,還可以作為模塊(也就是庫)被導入。不管是導入還是直接運行,最頂層的代碼都會被運行(PYTHON 用縮進來區分代碼層次)。而實際上在導入的時候,有一部分代碼我們是不希望被運行的。

舉一個例子來說明一下,假設我們有一個 CONST.PY 文件,內容如下:

PI = 3.14

def main():
    print "PI:", PI

main()

我們在這個文件里邊定義了一些常量,然后又寫了一個 MAIN 函數來輸出定義的常量,最后運行 MAIN 函數就相當于對定義做一遍人工檢查,看看值設置的都對不對。然后我們直接執行該文件(PYTHON CONST.PY),輸出:

PI: 3.14

現在,我們有一個 AREA.PY 文件,用于計算圓的面積,該文件里邊需要用到 CONST.PY 文件中的 PI 變量,那么我們從 CONST.PY 中把 PI 變量導入到 AREA.PY 中:

from const import PI

def calc_round_area(radius):
    return PI * (radius ** 2)

def main():
    print "round area: ", calc_round_area(2)

main()

運行 AREA.PY,輸出結果:

PI: 3.14
round area:  12.56

可以看到,CONST 中的 MAIN 函數也被運行了,實際上我們是不希望它被運行,提供 MAIN 也只是為了對常量定義進行下測試。這時,IF NAME == 'MAIN' 就派上了用場。把 CONST.PY 改一下:

PI = 3.14

def main():
    print "PI:", PI

if __name__ == "__main__":
    main()

然后再運行 AREA.PY,輸出如下:

round area:  12.56

再運行下 CONST.PY,輸出如下:

PI: 3.14

這才是我們想要的效果。

IF NAME == 'MAIN' 就相當于是 PYTHON 模擬的程序入口。PYTHON 本身并沒有規定這么寫,這只是一種編碼習慣。由于模塊之間相互引用,不同模塊可能都有這樣的定義,而入口程序只能有一個。到底哪個入口程序被選中,這取決于 NAME 的值。

2. name

NAME 是內置變量,用于表示當前模塊的名字,同時還能反映一個包的結構。來舉個例子,假設有如下一個包:

A
├── B
│   ├── C.PY
│   └── __INIT__.PY
└── __INIT__.PY

目錄中所有 PY 文件的內容都為:

PRINT __NAME__

我們執行 PYTHON -C "IMPORT A.B.C",輸出結果:

A
A.B
A.B.C

由此可見,NAME 可以清晰的反映一個模塊在包中的層次。其實,所謂模塊名就是 IMPORT 時需要用到的名字,例如:

IMPORT TORNADO
IMPORT TORNADO.WEB

這里的 TORNADO 和 TORNADO.WEB 就被稱為模塊的模塊名。

如果一個模塊被直接運行,則其沒有包結構,其 NAME 值為 MAIN。例如在上例中,我們直接運行 C.PY 文件(PYTHON A/B/C.PY),輸出結果如下:

__MAIN__

所以,IF NAME == 'MAIN' 我們簡單的理解就是: 如果模塊是被直接運行的,則代碼塊被運行,如果模塊是被導入的,則代碼塊不被運行。


第5組 王顥 C# CheckBox控件的全選和反選問題

這里研究了兩種全選的方法:

  1. 首先,使用3個panel控件和8個checkBox控件實現了反選和全選的實現界面,panel11的Dock屬性設為Top,panel12的Dock屬性設為Left,panel13的Dock屬性設為Fill,效果如圖1所示:


    圖1.png
  1. 將全選按鈕checkBox1的click事件中實現如下代碼:
 private void checkBox1_Click(object sender, EventArgs e)
 {
//判斷
       if (checkBox1.CheckState == CheckState.Checked)
       {
              foreach (CheckBox ck in panel13.Controls)
              ck.Checked = true;
        }
        else
        {
               foreach (CheckBox ck in panel13.Controls)
               ck.Checked = false;
        }
 }

在Form1的構造方法中給所有子選項綁定ck_child_CheckedChanged方法,代碼如下:

 public Form1()
 {
        InitializeComponent();
         foreach (CheckBox ck in panel13.Controls)
         {
             ck.CheckedChanged += ck_child_CheckedChanged;
         }
 }

最后在方法中實現如下代碼:

 private void ck_child_CheckedChanged(object sender, EventArgs e)
 {  
      CheckBox c = sender as CheckBox;
      if (c.Checked == true)
      {
            foreach (CheckBox ch in panel13.Controls)
            {
                 if (ch.Checked == false)
                 return;
            }
                checkBox1.Checked = true; 
       }
       else
       {
                checkBox1.Checked = false;
      }
}

下圖2,3展示全選和反選的實現效果:

圖2.png
圖3.png
checkedListBox基礎使用

首先從工具箱中拖出一個checkedListBox控件和一個Label及一個button控件,checkedListBox控件可通過編輯項添加選擇項,如圖4所示:


圖4.png

在checkedListBox控件如圖5所示的兩個焦點事件中添加代碼:


圖5.png

代碼如下:

 short inum = 0;
 private void checkedListBox1_Validated(object sender, EventArgs e)
 {
        label2.Text = "當前共有"+checkedListBox1.Items.Count.ToString()+"項"+
"\r\n"+"數字項有"+inum.ToString()+"項";
 }


 private void checkedListBox1_Validating(object sender, CancelEventArgs e)
 {
        short i = 0;
        for (i = 0; i < checkedListBox1.Items.Count;i++ )
        {
             if(Information.IsNumeric(checkedListBox1.Items[i].ToString()))
             {
                  inum++;
              }
         }
  }

當焦點離開checkedListBox控件點擊button控件就會自動觸發Validating和Validated事件,效果如圖6所示:


圖6.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,333評論 25 708
  • 前言 Python的創始人為Guido van Rossum。1989年圣誕節期間,在阿姆斯特丹,Guido為了打...
    依依玖玥閱讀 3,602評論 6 37
  • http://python.jobbole.com/85231/ 關于專業技能寫完項目接著寫寫一名3年工作經驗的J...
    燕京博士閱讀 7,628評論 1 118
  • C++調用python 在C/C++中嵌入Python,可以使用Python提供的強大功能,通過嵌入Python可...
    Bruce_Szh閱讀 13,836評論 1 7
  • 澤毅學長有拜托我寫一點關于留學的事情,這次講一點留學前后的心態該如何調整。首先有些人可能會覺得自己要出國回來就是如...
    一個不信星座的水瓶座閱讀 171評論 0 0