式を実行して式を作る。

以前のこの記事 に dieさん からコメントをいただきました。
ラムダ式の遅延実行

die wrote:
この件、すでに解決済みかもしれませんけど、こんなのでどうでしょうか

for (var i = 0; i <= 9; i++) {
$get("button" + i).onclick = (function(i) {
return function() { alert(i); };
})(i);
}
後で評価するから i の値をいつまでも参照しているわけで、その場で評価して作ってしまえばいいんですね。

で一応これを VB で書くとこんな感じか

Dim buttonList = New Button() {Button1, Button2, Button3, Button4, button5, button6, button7, button8, button9}
For i = 0 To buttonList.Count - 1
AddHandler buttonList(i).Click, _
(Function(j As Integer) _
Function(sernder As Object, args As EventArgs) _
MessageBox.Show(j.ToString()) _
)(i)
Next