| ホーム | 掲示板 | 特集 | サンプル | Tips | リンク | その他 | blog 

Tips
[VS2003]
 日付時刻の演算
 ListBoxにファイル一覧
 ファンクションF10
 WMIでサービス一覧
 YAHOO検索エンジン
[VS2005]
 Administrator権限チェック
 非同期ExecuteReader
 非同期ExecuteReader(CallBack)
 パスの結合
 ファイルを圧縮して保存
 コントロール配列の実装
 DataGridViewのCellイベント
 CSVファイルをDataGridViewに表示
 DataGridViewのリンクセルを見やすく
 DataGridViewマウス右ボタンで選択
 DataGridViewスクロール制御
 DataGridViewのCell移動をEnterで
 DataRepeaterコントロール
 GZ圧縮ファイルを解凍
 ファイルの削除
 ディレクトリ有無チェック
 ファイルのダウンロード
 非同期ファイルダウンロード
 ドライブの一覧
 ファイルのコピー
 ファイル有無チェック
 テキストファイルを読み込む
 特定の文字列を含むファイル検索
 フォームを表示(Show)する
 フォルダ一覧取得
 ドライブ詳細情報取得
 ファイル一覧取得
 テンポラリファイルパス取得
 継承コントロールの作り方
 フォルダの移動
 ファイルの移動
 My.Settingの利用
 MySQLCommandで抽出
 MySQLDeleteCommandで削除
 MySQLInsertCommandで挿入
 MySQLSelectCommandで抽出
 MySQLUpdateCommandで更新
 ネットワークに繋がってる?
 ネットワーク接続イベント取得
 固定長テキストファイルを読む
 Oracleストアドファンクション呼出1
 Oracleストアドファンクション呼出2
 OracleのLong Row型の画像を表示
 OracleのLong Row型をファイル保存
 Oracleパラメータクエリ実行
 ORACLE接続文字列生成
 VS2005でPing
 非同期でPing
 VB6のPrinterオブジェクトを.NETで
 Reportでテーブル形式表示
 ReportViewerでパラメータ設定
 メール送信
 非同期でメール送信
 メール送信(MailMessage利用)
 シリアル通信プログラム
 シリアル通信(文字列送信)
 二重起動の禁止
 特殊フォルダ取得
 スプラッシュウインドウ表示
 テーブルへ複数行の挿入
 CSVファイルをテーブルへ挿入
 テーブルへ複数行の挿入(マッピング)
 SqlBulkCopyで郵便番号データ処理
 SQL Server接続文字列生成
 Stopwatchで時間の計測
 システムサウンド再生
 CSVファイル読み込み
 固定長テキストファイルを読む2
 TableAdapterでTransaction
[VS2005] コントロール配列の実装 2008/03/17
いまだに質問が多いので、コントロール配列の説明をしようと思います。
VB6では、コントロール配列はとても簡単に利用でき、イベントの処理も引数のIndexを利用することで容易に処理することができました。
しかしながら、VB.NETでは、コントロール配列という概念がなくなり、実装するのも面倒になりました。
ここで説明するのは、私が利用している方法であり、この方法が正規の方法ということではなく、あくまで参考にしていただければと思います。  
■フォームコントロールに配置済みのコントロールをコントロール配列にする場合

 
このように配置されているボタンコントロールをコントロール配列にする場合を考えてみます。
コントロール配列といっても、目的により実装コードも変わってくるので、目的別に説明していきます。  
■イベント処理をしたい
Private Sub Command1_Click(Index As Integer)
    MsgBox "Index" & Index & "番のボタンが押されました"
End Sub
 
これは、VB6のイベントプロシージャですが、引数のIndexを利用することにより、それぞれのボタン別の処理を行うことができます。
これと同様のことを行うには、ボタンオブジェクトのNameまたは、Tagプロパティを利用して実装することができます。
 
Public Class Form1
    Private Sub Button_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) _
                Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click

        Dim btn As Button = CType(sender, Button)
        MessageBox.Show(String.Format("ボタン名{0}がクリックされた", btn.Name))
    End Sub
End Class
 
このようにすれば、イベントを処理することが可能です。ただ、ボタン名で判断するのはちょっと使いづらいので、Tagプロパティを利用するほうがいいでしょう。
フォームに配置されているボタンコントロールのプロパティのTagの値に1〜4を設定してください。  
Public Class Form1
    Private Sub Button_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) _
                Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click

        Dim btn As Button = CType(sender, Button)
        MessageBox.Show(String.Format("ボタン番号{0}がクリックされた", btn.Tag.ToString))
    End Sub
End Class
 
こうすれば、VB6のようにIndexの変わりに利用することができます。  
■コントロールをIndexで指定して利用する
VB6では、Command1(1).Captionなどというように、Indexでコントロールを指定して利用できました。これと同様の仕組みを実装するには、面倒ですが、配列に格納して利用するしかありません。
 
Public Class Form1

    Private _Buttons As New List(Of Button)

    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) _
                                                                    Handles MyBase.Load
        '配列に格納
        Me._Buttons.Add(Me.Button1)
        Me._Buttons.Add(Me.Button2)
        Me._Buttons.Add(Me.Button3)
        Me._Buttons.Add(Me.Button4)

        'コントロールのText変更
        For i As Integer = 0 To Me._Buttons.Count - 1
            Me._Buttons(i).Text = "ボタン" & i.ToString
        Next
    End Sub

End Class
 
このようにすれば、配列番号でコントロールにアクセスできます。  
■まとめ
コントロール配列は使えないことはないが、ちょっと面倒。

Copyright © 2005 tadahiro higuchi. All Rights Reserved.