タイトル | : VB2005の配列の扱いについて |
記事No | : 6236 |
投稿日 | : 2007/09/05(Wed) 10:54 |
投稿者 | : 皐月 |
VB6.0からVB2005への移行を行っています。VB6.0ではCheck1(i)というチェックボックスをコントロール配列でまとめCommandChk(i)という配列にValue値を保存するようなプログラムを作成していました。以下がそのコードです。
<VB6.0> Private Sub Command1_Click() Dim i As Integer For i = 0 To 100 Commandchk(i) = Check1(i).Value Next i Unload Me End Sub
Commandchk(i)の配列に保持した値は、再度メインフォームからCommand1_Clickの処理があるフォームを呼び出されたときに、Check1(i)に代入され、どのチェックボックスにチェックが入っていたか呼び出すことが可能です。
上記の処理をVB2005で実現しようと思ったのですが・・・。以下はイベントプロパティCheckedChangedを利用してまとめようとしました。
<VB2005> Private Sub docommand(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox99.CheckedChanged, CheckBox98.CheckedChanged, CheckBox97.CheckedChanged, CheckBox96.CheckedChanged, CheckBox95.CheckedChanged, CheckBox94.CheckedChanged,・・・・100個あるため省略・・・・・CheckBox1.CheckedChanged
Dim ChkOn As CheckBox Dim No As String
ChkOn = CType(sender, CheckBox) No = Microsoft.VisualBasic.Left(ChkOn.Name, 9) MsgBox("ボタン[" & Me.Controls(2).Name & "]が押されました") End Sub
省略している部分からもわかるように非常に頭でっかちな、ソースになってしましました。また、コントロール配列が使えないことから、どのCheckBoxにチェックがついているのかどのように保持すればよいのかわからなくなってしまいました。チェックボックスひとつひとつの状態を見ていくコードを書くのは面倒だし、ソース的にも美しくありません。Indexの代わりになるような値はないのでしょうか?
なんとかVB6.0でのソースのようにスマートにしたいのですが、本に書いている方法はどれもCheckedChangedイベントだったので、やはり頭でっかちな部分が気になります。なにはスマートないい方法はないでしょうか?
|