- - PR -
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-06-25 23:51
こんばんは。
前回”クリックされたボタンの判断”では大変お世話になりました。 前回同様、VB.NET2005とAccess2003を使用して簡単なソフトを製作しています。 AccessのテーブルにはID、名前、画像、説明を入れています。 VBへ呼び出し、名前・画像・説明文を連結させて表示させています。 レコードを順番に表示していくのではなく、レコードと同じだけのボタンを配置し、 ボタンに対応したレコードを表示できるようにしたいと思っています。 例)”あ”というボタンをクリック→”あ”の画像、説明文を表示 どのボタンが押されるのか分からないので、どのボタンがクリックされたかという判断について質問させていただきました。 そして、できたプログラムを元にAccessからデータを呼び出しを行いたかったのですが、エラーがでてしまいました。 コードとエラーは以下のとおりです。 ______________ Imports System.Data.OleDb Public Class Form1 Dim Cn As New OleDbConnection("接続文字列.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim table As New DataTable Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Row As DataRow Dim kana(45) As Button Dim i As Integer _______ Private Sub Form1_Load(略) Handles MyBase.Load SQLCm.CommandText = "SELECT * From T_指文字" Adapter.Fill(table) kana(0) = Button1 kana(1) = Button2 : : kana(44) = Button45 kana(45) = Button46 For i = 0 To 45 kana(i).Tag = i AddHandler kana(i).Click, AddressOf myclick Next table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub ___________ Private Sub myclick(略) i = DirectCast(DirectCast(sender, Button).Tag, Integer) ★Dim table As DataTable = DirectCast(Label1.DataBindings(0).DataSource, DataTable) Dim Bind As BindingManagerBase = Me.BindingContext(table) Bind.Position = i Call LoadRecord(Bind.Current.Row) End Sub _________ Private Sub LoadRecord(ByVal Row As DataRow) Dim FileName As String If IsDBNull(Row("画像")) Then PictureBox1.Image = Nothing Return End If FileName = Row("画像") If IO.File.Exists(FileName) Then PictureBox1.Image = Image.FromFile(FileName) Else PictureBox1.Image = Nothing End If End Sub End Class ____________ となっています。エラーは★の列の”(0)”の部分です。 エラー:インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名: index というようにでました。()内の数字を変えてみたりしたのですが・・・・ 同じエラーメッセージがでてしまいます。 どなたかご存知でしたらご教授ください。よろしくお願いします。 長くなってしまい、申し訳ないです。。。 |
|
投稿日時: 2008-06-26 04:16
これは IndexOutOfRangeException って例外です。
この例外が発生している箇所をみると パラメータ index が 0 ですよね。 ってことは DataBindings プロパティに要素(Binding オブジェクト)がないということです。 ちゃんと Label1 にデータ連結していますか? |
|
投稿日時: 2008-06-26 10:08
mitchinさん、おはようございます!
ご返答ありがとうございます。 エラーの意味がいまいちち理解できなかったので、わかりやすく書いて頂き助かりました。 プログラムを見直したところ、 Label1.DataBindings.Add("Text",table,"名前") という部分が抜けていました・・・。一番大事な連結部分ですよね。。。。 ここを付け足したところ、labelへの表示も対応した画像もきちんと表示されるようになりました! 貴重なお時間を割いてご返答いただきましてありがとうございました。 |
1