close

有時候我們在畫面上會安排許多相同類別的元件
例如
可能在製作某些功能時會用到條列式的排版 這樣免不了就會有一堆按鈕 或著 textBox之類的
最常見的就是你一些重複的功能 但是又要讓user可以做某種程度的分類

如下圖

clip_image002

上圖的功能是送出一份文件 這份文件是以簽呈的方式進行傳遞
簽呈的順位由textBox決定 數字越低 順位越優先
點textBox旁的選擇就會決定上面的單在勾選後是在哪個textBox中列出來 被選擇列會以黃褐色顯示 作為提示

其實最簡單的方式就是每個按鈕去產生事件
可是這樣實在是很呆 圖中有6欄 就又去產生6個選擇按鈕事件 負責換掉選擇列的顏色.沒有被選的顏色.把部門清單重新整理.
把成員清單重新整理…這樣類似度非常高的Code如果不用Function處理帶入的參數 就要呆呆的寫6次

或者說寫1次但是Copy5次 反正就是會在你的程式李出現6次
然後…清除按鈕又要再寫6次………
這不管是WebForm或是WinForm設計都會遇到

今天先來說怎麼在Web自訂Function然後取得觸發該Function的物件ID 就可以使用參數來處理 這樣的狀況了
上面的textBoxID 為 txtRec1~txtRec6
選擇按鈕 為 btnSelect1~btnSelect6
清除按鈕 為 btnClear1~btnClear6 當然按鈕要處理的就是互相對應編號的textBox

首先看怎麼取得觸發事件的物件ID
當然我們會把這一群選擇按鈕 指向同一個事件 , 然後把旁邊那一群取消按鈕 指向同一個事件
而在她們的事件裡就可以用以下的方法取得ID

以下為清除按鈕的範例

'取得按下的按鈕ID
'sender就是事件的觸發者 也就是我們的按鈕
'要取得他的ID要先把他轉換成對應的物件型別 也就是Button 然後就可以用.ID的屬性取得觸發這個事件的
'按鈕ID
Dim btnID As String = CType(sender, Button).ID

'如果要對取得的ID丟給其他事件進行其他處理的話
'就可以把他做型別轉換 或者到要處理的Function在轉換
'但是如果該Function不在這個頁面上會找不到這個物件.
'上次為此折騰了好久 幸好跟Cougar討論後 一語驚醒夢中人 被 Cougar數落的一頓@@”
'因此我習慣先轉換完在丟
'將ID改為對應的textBox的ID 並轉換型別為textBox
'宣告一個textBox 由於我的textBox ID是 txtRec1~txtRec6 因此把取得的按鈕ID取出最右邊的字元
'也就是數字的部分 然後家在字串txtRec的尾巴 就可以組出我們要處理對象的ID
'接著就做型別轉換
Dim txtID As TextBox = CType(FindControl("txtRec" & Right(btnID, 1)), TextBox)

'呼叫清除事件 就可以把我們要處理的textBox物件丟進去
clearTxt(txtID)

clearTxt的程式內容

Public Sub clearTxt(ByVal txtID As TextBox) 
      txtID.Text = ""                                     
End Sub                                                       

依此類推 我們的選擇按鈕就可以依照同樣的方式去處理了
不過選擇要處理的事情比較多 Code比較常 就留待有興趣的網友自行研究吧

arrow
arrow
    全站熱搜

    ADOLPH 發表在 痞客邦 留言(0) 人氣()