2017年9月1日 星期五

018兩個CheckBoxList互相搬移

在寫作業清點的程式之前,先來看看兩個CheckBoxList如何互相搬移它們的內容。以下圖解:
  先來看看基本的畫面設計。這裡用到了兩個CheckBoxList,內容是把第一個用「編輯項目」的方式,加進所需的號碼;第二個CheckBoxList則不用編輯項目,讓它保持空白即可(因為它的內容來自第一個CheckBoxList)

  接下來看看Button1的程式,如下:

  這裡用到上一次練習到的一維字串陣列。主要是把移除的項目暫存到陣列中,再寫一個程式把它們正式從CheckBoxList1中移除。接下來,CheckBoxList2的程式也差不多。
  這裡特別解釋一下,我們設了一個字串陣列,叫作「itemA[]」,其中,[]裡面要放的是數字,表示這個字串陣列的長度。當然,這裡左邊保持空白,由右邊來控制。至於右邊怎麼定義這個字串陣列的長度?用的是「CheckBoxList1.Items.Count」。
  從以前學過的,我們知道要計算CheckBoxList這一從物件的內容數,使用的是「Count」。然而,在計算陣列長度時,用的不是「Count」,而是「Length」,如上圖解 。
  第一個迴圈,程式碼:
for(int i = 0; i < itemA.Length; i++)
為什麼用的是「itemA.Length」,而不是「CheckBoxList1.Count」?因為這裡要計算的,是「被選取然後丟到字串陣列"itemA[]"裡的CheckBoxList1裡的項目。重點是「被選取後丟過去」的項目,故要計算的是在陣列中的東西,而不是更早一步處理的CheckBoxList1。

CheckBoxList2.Items.Add(CheckBoxList1.Items[i].Text);

這一段好理解,基本上就是把選取的CheckBoxList1項目丟到CheckBoxList2裡。
  接下來是把剛才選取的CheckBoxList1的項目也丟到陣列itemA裡,程式碼為:
itmeA[a] = CheckBoxList1.Item[i].Text;
因為一開始設一個「int a = 0;」故進入迴圈第一次執行,是itemA[0]會拿到第一個被選取的CheckBoxList1.Item[0].Text。當執行第二次迴圈時,如果不加入程式碼「a = a + 1」,陣列會停在itemA[0],就錯誤啦!故要加一個「a = a + 1」。
  剩下的都簡單容易理解,就不多解釋了!


  以上是執行結果。
  此外,如果覺得核取方塊太小,可以再往前看看之前介紹過的解決方法。

沒有留言:

張貼留言