C 給Button的Click傳入自定義引數

2021-09-24 03:12:21 字數 1140 閱讀 1398

如何給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...