ラベルやボタンのひとつひとつにIf文使っていませんか?―Object型とFunction―

私は研究の過程でよくVisual Basicで実験用プログラムを書くのですが、作るプログラムって、ラベルやボタンがたくさんフォーム上に並んでいるものが多いんですよね。そういう時に、ある条件が満たされたら一度に複数のラベルやボタンに同じような操作を行うってことがあるのです。
例を以下に示します。CommandButton1からCommandButton20に「OK」と表示したいときに、

CommandButton1.Text = "OK"
CommandButton2.Text = "OK"
CommandButton3.Text = "OK"
CommandButton4.Text = "OK"
CommandButton5.Text = "OK"
CommandButton6.Text = "OK"
CommandButton7.Text = "OK"
CommandButton8.Text = "OK"
CommandButton9.Text = "OK"
CommandButton10.Text = "OK"
CommandButton11.Text = "OK"
CommandButton12.Text = "OK"
CommandButton13.Text = "OK"
CommandButton14.Text = "OK"
CommandButton15.Text = "OK"
CommandButton16.Text = "OK"
CommandButton17.Text = "OK"
CommandButton18.Text = "OK"
CommandButton19.Text = "OK"
CommandButton20.Text = "OK"

なんて書いてもいいですが、大変もっさりしたコードになってしまいます。今回は「すべてのボタンにOKの表示」だからいいですけど、これが「幾つかの条件によってある1つのボタンだけNGになる」とかだと、もうその度に似たようなコードを書くことになってしんどいことこの上なしです。
そこで私は、返り値がObject型の関数を一回作ってしまいます。そうすれば、このようなもっさりコードは関数の定義内で1回書いて済みます。
まず関数ですが、こんな感じ:

Function getCommandButton(ByVal n As Integer) As Object
    Select Case n
        Case 1
            Return CommandButton1
        Case 2
            Return CommandButton2
        Case 3
            Return CommandButton3

        '(中略)

        Case 19
            Return CommandButton19
        Case 20
            Return CommandButton20
        Case Else
            Return Nothing
    End Select
End Function

最後のReturn Nothingは私の趣味です。返り値がNothingである場合の処理が面倒だ(もしくはこの一文を読んで理解できていない)という人は代わりにCommandButton20を入れてもいいかもしれません。
この関数を最初に用意しておきますと、先のコードはこれで済みます:

For i As Integer = 1 To 20
    getCommandButton(i).Text = "OK"
Next

ね、簡単でしょ?
先ほどちょろっと言いました、「ある条件の時はひとつのボタンだけNGと表示したい」というときも、このとおり:

'kの値と同じ番号が振られたボタンだけNGと表示。例えば9。
Dim k As Integer = 9

For i As Integer = 1 To 20
    If i = k Then
        getCommandButton(i).Text = "NG"
    Else
        getCommandButton(i).Text = "OK"
    End If
Next

GUIをもった実験プログラムを書くのに多くの学生がVBでプログラムを書いてるっぽいので、この記事を書いてみました。研究の一助になれば幸いです。