如何給click事件傳遞自定義的引數
有一種方法是在button的tag屬性設定為你要傳入的引數,一般不建議這麼做,當然也不失為一種簡單粗暴的好辦法
為什麼寫這個是因為: 一開始我就是用具名函式的形式繫結click事件的
原因是慎用匿名函式
匿名函式會產生很多記憶體洩漏的問題,因為你不小心就會捕獲了各種變數甚至是一些全域性靜態變數
但是如果想傳入自定義引數的話,那麼第二種方式是不可以的
其餘的方式只能通過lamada表示式來實現了
**如下:
public partial class mainwindow : window
;//第二種方式:不行,具名函式無法獲得區域性變數
button1.click += button1_click;
//第三種方式:也是匿名函式,匿名中包含具名函式,然後通過傳參來實現
//(sender, e) => mybutton1_click(paramstr) 這個整體就是乙個匿名函式
//本質上也是捕獲,捕獲了this和paramstr
button1.click += (sender, e) => mybutton1_click(paramstr);
//第四種方式:跟第三種一樣,也是匿名函式,匿名中包含具名函式,然後通過傳參來實現
//只不過多了一步,定義了乙個delegate
routedeventhandler handler =(sender,e)=>mybutton1_click(paramstr);
button1.click += handler;
}private void button1_click(object sender, routedeventargs e)
private void mybutton1_click(string param)
}
第二種方式是行不通的,其他三種方式本質上都是捕獲了區域性變數
將滑鼠移動至=>上 會提示已捕獲
如下:
Button的四種Click響應方法
button用得挺多的,在這整理了下它的事件處理方法,發現實現方法還不少,我比較喜歡第二種,你呢,最常用哪一種?實現一 button bt demo button findviewbyid r.id.bt demo bt demo.setonclicklistener newonclickliste...
C 給函式傳陣列引數
在c 中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小 例 void print 1 int n,int datas std cout std endl 對這個函式,我們可以這樣使用它 const int n 3 int datas n print 1 n,datas...
C 給函式傳陣列引數
在c 中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小 例 void print 1 int n,int datas std cout std endl 對這個函式,我們可以這樣使用它 const int n 3 int datas n print 1 n,datas...