ListBoxへのAddでエラー

このQ&Aのポイント
  • DoubleからStringの型変換が不可なのか疑問です。.ToStringがエラーになっています。
  • Items.AddRangeを使用する場合、どのように書けば良いのかわかりません。
  • エラーメッセージは、AddRangeでString型の値をオブジェクトの1次元配列またはListBox.ObjectCollectionに変換できないため、オーバーロードの解決に失敗しました。
回答を見る
  • ベストアンサー

”ListBoxへのAddでエラー”

タイトルの通りです。 DoubleからStringの型変換が不可なんでしょうか? ”.ToString” によってエラーになってるようです。 For~Eachでの3行で処理するとOKなのですが1行で なんとかならないものかと調べていましたが、いきずまっています。 Items.AddではなくItems.AddRangeを使う場合、どういうふうに 書くんでしょうか?。ちなみに、配列がString型の場合にはエラー にならないことは知っています。(.ToStringも不要) ’--------サンプル---------- Public Class Form1 Private Sub Button1_Click() Handles Button1.Click Dim Test_arr() As Double = {1.4, 1.2, 1.9, 1.7, 1.4, 2.8, 1.2, 3.2, 1.99, 4.2} ListBox1.Items.AddRange(Test_arr.ToString) '←この行でエラー For Each x As Double In Test_arr '←これはOK ListBox1.Items.Add(x.ToString) ' Next ' End Sub End Class エラー内容は、↓ ------------------------------------------------------------------ エラー 1 これらの引数で呼び出される、アクセス可能な 'AddRange' が ないため、オーバーロードの解決に失敗しました: 'Public Sub AddRange(items() As Object)': 型 'String' の値を 'Object の 1 次元配列' に変換できません。 'Public Sub AddRange(value As System.Windows.Forms.ListBox.ObjectCollection)': 型 'String' の 値を 'System.Windows.Forms.ListBox.ObjectCollection' に変換できません。 ------------------------------------------------------------------ どなたかご教授願えれば幸いです。環境はVisualBasic2010+WindowsXPです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

何通りかありますが……。 a.) Double型の配列をそのまま渡す b.) 文字列の配列に変換して渡す b-1.) Array.Convertメソッドを使う b-2.) List(Of String)に追加しておき,ToArrayメソッドで配列にする b-3.) Select拡張メソッドで変換後,ToArray拡張メソッドで配列にする c.) 一個ずつAddする

ponpokovvv
質問者

お礼

頂いたヒントを元に悪戦苦闘してましたが、DoubleからStringへ の変換の実例が、ネット上ではほとんど見つけることができません。 MSDNで、「両方の配列の要素のデータ型が、参照型である必要があります」となっていますし、配列の型を変えてしまうと後々不便な ので、ListBoxへのAddの時だけ一時的にArrayListに取り込む ようなことをするしかないのかなぁと思っています。 ListBox1.Items.AddRange(New ArrayList(Test_arr).ToArray) ↑の通り、とりあえずこれでやっています。 もうちょっと調べてみるつもりです。 ヒントをいただいてありがとうございました。

関連するQ&A

  • 100万行位のファイルを出来るだけ速くListBoxに登録したい

    vbCrLfで区切られた100万行位のテキストファイルがあり、 これを出来るだけ速くListBoxに登録するには どのような方法が良いでしょうか。 現在はStreamReaderで変数strに読み込んで、 Dim Data() As String = Split(str,vbCrLf)で配列に読み込み、 ListBox1.Items.AddRange(Data) で登録しているのですが、何分もかかってしまいます。 良い方法がありましたら、ご教示頂けると助かります。

  • C# listbox

    どうしても解らないのでご教授お願いたします. やりたいことは単純なのですが,リストボックスにドラックドロップしたときに表示する フォント(文字の色とサイズ)を変更したいのですが,下記のプログラムではドラッグドロップ するとリストが真っ白になってしまいます.いろいろ調べたのですが何が原因が解りません. 何卒よろしくお願いいたします. private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { listBox1.Items.Clear(); listBox1.DrawMode = DrawMode.OwnerDrawVariable; //コントロール内にドロップされたとき実行される //ドロップされたすべてのファイル名を取得する string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop, false); //ListBoxに追加する listBox1.Items.AddRange(fileName); listBox1.Sorted = true; } private void listBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { //コントロール内にドラッグされたとき実行される if (e.Data.GetDataPresent(DataFormats.FileDrop)) { //ドラッグされたデータ形式を調べ、ファイルのときはコピーとする e.Effect = DragDropEffects.Copy; } else { //ファイル以外は受け付けない e.Effect = DragDropEffects.None; } } //DrawItemイベントハンドラ //項目を描画する private void ListBox1_DrawItem(object sender,System.Windows.Forms.DrawItemEventArgs e) { //背景を描画する Font cfont = new Font("MS P明朝", 9, FontStyle.Bold); //適切な色で背景を描画する。 e.DrawBackground(); Rectangle rec = e.Bounds; Graphics g = e.Graphics; Color col = Color.Black; Font deffont = e.Font; deffont = cfont; string txt = ((ListBox)sender).Items[e.Index].ToString(); TextRenderer.DrawText(g, txt, deffont, rec, col, TextFormatFlags.Default); }

  • VB2015 ListBoxの二次元配列を呼出す

    始めまして。 趣味でVBソフトを作りたいと奮闘中です。 ExcelVBAやC#の簡単ソフトを作った経験があります。 パソコン環境は、W10x64、VB2015です。 ListBoxに2次元配列で下記のように書き込み、選択した行の右側のデータ(欄2)を他のTextBoxに表示させたいのです。 下のデータを2次元配列にして読み込ませる方法と、選択した行の欄2のデータを取り込む方法を教えて頂けると嬉しいです。ListBoxのプロパティのMultiColumnはTrueにしてあります。  欄1 欄2 北海道  550 青森県  138 宮城県  230 東京都  1360 現在は次のようにしてなんとか逃げておりますが、2次元配列でスマートに出来れば嬉しいです。 書き込み ListBox1.BeginUpdate() ListBox1.Items.Add("北海道 , 550") ListBox1.Items.Add("青森県 , 138") ListBox1.Items.Add("宮城県 , 230") ListBox1.Items.Add("東京都 , 1360") ListBox1.EndUpdate() 呼び出し Dim textArray = ListBox1.SelectedItem.ToString.Split(",")  Dim Jinko As Single = Single.Parse(textArray(1)) TextBox.Text = Jinko 宜しくお願い致します。 熊谷

  • listBoxとTimerについて C#

    listBoxとTimerについて C# ヤフーニュースのURLをlistboxへ入れます。 そしてlistBox1の中身を画面表示させたら、次にlistBox2の中身も表示したいと思っています。 最初listBoxが1つだったときはうまく行っていたのですが、listBoxを増やすとうまく行かなくなりました。 この状態だと、listBox2の中身だけ表示させて終わってしまいます。 Timerの使い方が怪しいと思うのですが、どうでしょうか? 些細なことでも何でもいいのでご意見頂ければ助かります。 -----以下コード抜粋------ public partial class Form1 : Form { public Form1() { InitializeComponent(); } int urlindex = 0; private void Form1_Load(object sender, EventArgs e) { listBox1.AllowDrop = true; listBox1.DragEnter += new DragEventHandler(listBox1_DragEnter); listBox1.DragDrop += new DragEventHandler(listBox1_DragDrop); listBox2.AllowDrop = true; listBox2.DragEnter += new DragEventHandler(listBox2_DragEnter); listBox2.DragDrop += new DragEventHandler(listBox2_DragDrop); } private void listBox1_DragEnter(object sender, DragEventArgs e) { //URLのみ受け入れる//@ITより if (e.Data.GetDataPresent("UniformResourceLocator")) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } private void listBox2_DragEnter(object sender, DragEventArgs e) { //URLのみ受け入れる//@ITより if (e.Data.GetDataPresent("UniformResourceLocator")) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } private void listBox1_DragDrop(object sender, DragEventArgs e) { //ドロップされたリンクのURLを取得する//@ITより string url = e.Data.GetData(DataFormats.Text).ToString(); //結果を表示 listBox1.Text = url; //MessageBox.Show(url); //ドロップされたデータがstring型か調べる if (e.Data.GetDataPresent(typeof(string))) { ListBox target = (ListBox)sender; //ドロップされたデータ(string型)を取得 string itemText = (string)e.Data.GetData(typeof(string)); //ドロップされたデータをリストボックスに追加する target.Items.Add(url); //MessageBox.Show("表示"); } } private void listBox2_DragDrop(object sender, DragEventArgs e) { //ドロップされたリンクのURLを取得する//@ITより string url = e.Data.GetData(DataFormats.Text).ToString(); //結果を表示 listBox2.Text = url; //MessageBox.Show(url); //ドロップされたデータがstring型か調べる if (e.Data.GetDataPresent(typeof(string))) { ListBox target = (ListBox)sender; string itemText = (string)e.Data.GetData(typeof(string)); target.Items.Add(url); } } private void goButton_Click(object sender, EventArgs e) { urlindex = 0; timer1.Start(); timer2.Start(); } private void timer1_Tick(object sender, EventArgs e) { timer1.Stop(); if (listBox1.Items.Count != 0 && urlindex < listBox1.Items.Count) { string url = (string)listBox1.Items[urlindex]; webBrowser1.Navigate(url); urlindex++; } } private void timer2_Tick_1(object sender, EventArgs e) { timer2.Stop(); if (listBox2.Items.Count != 0 && urlindex < listBox2.Items.Count) { string url = (string)listBox2.Items[urlindex]; } } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { timer1.Start(); timer2.Start(); } private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { }

  • ListBoxのデータを高速でファイルに書き込む方法 VB.NET

    ListBoxに大量のデータを登録してありそれをファイルに保存する場合 Dim data As String For i As Integer = 0 To ListBox1.Items.Count - 1 data = data & ListBox1.Items(i) & VbCrLf Next という方法で変数に読み込むとデータが大量にある場合 非常に遅く、OutOfMemoryのエラーが出てしまったりするのですが、 このような場合により適切な方法がありましたらご教授頂けないでしょうか。 宜しくお願いいたします。

  • ファイルをドラッグドロップでTextBooxにファイル名を出したい

    下記のサンプルコードをWEBサイトで見つけたので ListBox1というところをTextBox1と直して テキストボックスにファイルのフルパスが出るように したかったのですが、Listbox1だと正常なのですが、 TextBox1に変更すると動作しなくなってしまいます。 最後の部分の ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop))は TextBox1.Text=e.Data.GetData(DataFormats.FileDrop) に変更してあります。 正常に動作するにはどこを直したらよいか教えて頂きたいです。 宜しくお願いします。m(__)m --------------------------------------------------- Private Sub ListBox1_DragEnter(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragEnter '関連連づけの確認をしています。 'この場合、ドラッグアンドドロップの形式であるかどうか? If e.Data.GetDataPresent(DataFormats.FileDrop) Then 'ドロップ効果を取得 e.Effect = DragDropEffects.Copy Else 'ドロップ効果を破棄 e.Effect = DragDropEffects.None End If End Sub Private Sub ListBox1_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragDrop 'DragEnterイベントで、取得した情報を追加 ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop)) End Sub

  • LISTBOXの内容が更新されません。

    VB初心者です。よろしくお願いします。 visual basic2010expressにて作成してます 担当者の新規・更新のプログラムで テキストBOX(2)・LISTbox(1)・ボタンで構成されてます。 DBを読み込み LISTBOXに表示し LISTBOXで セレクトされたものを テキストBOXに表示し 修正し 更新処理(DB更新・LISTBOX更新)をします。 新規の場合は テキストBOXに入力し 新規処理(DB追加・LISTBOX更新)をします。 DB更新迄はされるのですが リストボックスに反映されません。 再度 更新ボタンを押下すると 変更後の内容になります。 初心者の為 コードが分かりにくいと思いますがよろしくお願いします。 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load '**********リストボックスセット********** LISTBOX_SET() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click '**********新規登録********** 'データベース接続用オブジェクト生成 Try Dim CON As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\TEST.mdb") '開始 CON.Open() Dim selectcommand As String = "INSERT INTO tantousya (ta_no, ta_mei) VALUES ('{0}', '{1}' );" Using cmb As OleDbCommand = New OleDbCommand( String.Format( selectcommand, TextBox1.Text, TextBox2.Text), CON) cmb.ExecuteNonQuery() End Using '**********リストボックスセット********** LISTBOX_SET() End Try End Sub Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click End End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click '**********変更登録********** 'データベース接続用オブジェクト生成 Try Dim CON As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\TEST.mdb") '開始 CON.Open() Dim selectcommand As String = "UPDATE tantousya SET ta_mei = '{0}' WHERE ta_no = {1};" Using cmb As OleDbCommand = New OleDbCommand( String.Format(selectcommand, TextBox2.Text, TextBox1.Text), CON) cmb.ExecuteNonQuery() End Using      '**********リストボックスセット********** LISTBOX_SET() End Try End Sub Private Sub LISTBOX_SET() '**********リストボックスセット********** '接続文字列 Dim i As Integer 'データベース接続用オブジェクト生成 Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\TEST.mdb") Try '開始 con.Open() Dim SQLCom As OleDbCommand = con.CreateCommand Dim selectcommand As String = "SELECT * FROM tantousya;" Dim da As OleDbDataAdapter = New OleDbDataAdapter(selectcommand, con) Dim ds As DataSet = New DataSet() 'データーセット() da.Fill(ds) Dim LIST As List(Of String) = New List(Of String)       For i = 0 To ds.Tables(0).Rows.Count - 1      LIST.Add(ds.Tables(0).Rows(i)("ta_no") & ds.Tables(0).Rows(i)("ta_mei") Next ListBox1.DataSource = LIST ・・・・・・・・・<ここのLISTの内容は変更になってます>・・・ Finally 'データベース終了 con.Close() End Try End Sub Private Sub ListBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown TextBox1.Text = MID(ListBox1.SelectedItem,1,2)     TextBox2.Text = MID(ListBox1.SelectedItem,3,10) End Sub

  • ListBox内の並び替えで実行エラー

    OSはXP、 Excelは2003を使用しています。 ユーザーフォーム内のListBox内で、コマンドボタンをクリックして行を上や下に並び替えたく、 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1041407835 を参考にして、下記の通りに組んだのですが、 下に並び替えるCommandButton2を実行時や、 上に並び替えるCommandButton1を「2回目」に実行時に 「実行時エラー -2147417848(80010108)  オートメーションエラーです。 起動されたオブジェクトはクライアントから切断されました。」 となってしまいます。 Private Sub CommandButton1_Click() Dim i As Variant Dim j As Integer Dim k As Integer Dim myBuf1 As Variant Dim myBuf2 As Variant ' 選択されている項目を1つ上げる。 i = Me.ListBox1.ListIndex If i > 0 Then For j = 1 To 7 myBuf1 = Me.ListBox1.List(i - 1, j) Me.ListBox1.List(i - 1, j) = Me.ListBox1.List(i, j) Me.ListBox1.List(i, j) = myBuf1 Me.ListBox1.Selected(i - 1) = True For k = 0 To 6 myBuf2 = Me.ListBox2.List(i - 1, k) Me.ListBox2.List(i - 1, k) = Me.ListBox2.List(i, k) Me.ListBox2.List(i, k) = myBuf2 Me.ListBox2.Selected(i - 1) = True Next k Next j End If End Sub Private Sub CommandButton2_Click() Dim i As Variant Dim j As Integer Dim k As Integer Dim myBuf1 As Variant Dim myBuf2 As Variant ' 選択されている項目を1つ下げる。 i = Me.ListBox1.ListIndex If i < Me.ListBox1.ListCount - 1 Then For j = 1 To 7 myBuf1 = Me.ListBox1.List(i + 1, j) Me.ListBox1.List(i + 1, j) = Me.ListBox1.List(i, j) Me.ListBox1.List(i, j) = myBuf1 Me.ListBox1.Selected(i + 1) = True For k = 0 To 6 myBuf2 = Me.ListBox2.List(i + 1, k) Me.ListBox2.List(i + 1, k) = Me.ListBox2.List(i, k) Me.ListBox2.List(i, k) = myBuf2 Me.ListBox2.Selected(i + 1) = True Next k Next j End If End Sub 説明不足や上記の記述にとんちんかんな間違いがありましたら、ごめんなさい。 どなたか解決方法を教えて頂けますようお願い致します。

  • リストボックスにファイル名のみを表示するには?

    いつもお世話になっています。 今、VisualStudio.NETのVB.NETを使用して勉強しているものです。 現在、特定のフォルダからその中に入っているファイルを リストボックスに表示させたいと思っています。 フルパスを表示させることはできたのですが、ファイル名のみの表示がうまくいきません。 どなたか教えていただけないでしょうか。 以下のようにコードを書いております。 一度、TextBox1にフォルダのパスをコピーする仕組みになっています。 GetFileName関数を使用すればいいのかもしれませんが、 うまく組み合わせることができません。 どうぞよろしくお願いいたします。 Private Sub GetAllFiles(ByVal folder As String, _ ByVal searchPattern As String, ByRef files As ArrayList) 'folderにあるファイルを取得する Dim fs As String() = _ System.IO.Directory.GetFiles(Me.TextBox1.Text, searchPattern) 'ArrayListに追加する files.AddRange(fs) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim subFolders As New ArrayList() Dim files As New ArrayList() 'TextBox1以下のファイルをすべて取得 GetAllFiles(Me.TextBox1.Text, "*.*", files) 'ListBox1に結果を表示する Me.ListBox1.Items.Clear() Me.ListBox1.Items.AddRange(files.ToArray()) End Sub

  • リストボックスのアイテムをマウスで並べ替えたいです

    リストボックスのアイテムをマウスのドラッグドロップで並べ替えたいのですが、 下のような感じで書いてみたのですが、 この状態だと、4番目のものを一番上に持ってくるという動作だけするのですが、 4番目から3番目に移動する場合や、1番目から3番目に移動する場合など 追加していくとIFが重なってきてすごくややこしくなってしまいます。 もっと分かりやすくて合理的な方法がありましたら、 大体でも良いですので、教えて頂けたら助かります。 よろしくおねがいいたします。 Private Sub Form1_Load(...略 ListBox1.Items.Add("AAA") ListBox1.Items.Add("BBB") ListBox1.Items.Add("CCC") ListBox1.Items.Add("EEE") End Sub Private Sub ListBox1_MouseDown(...略 SelectedSortFrom = ListBox1.SelectedIndex End Sub Private Sub ListBox1_MouseUp(...略 SelectedSortTo = ListBox1.SelectedIndex ListBox1Sort(SelectedSortFrom, SelectedSortTo) End Sub Private Function ListBox1Sort(ByVal From As Integer, ByVal Too As Integer) If From = -1 Then Exit Function If Too = -1 Then Exit Function Dim A(ListBox1.Items.Count) As String Dim B As Boolean For i As Integer = 0 To ListBox1.Items.Count - 1 A(i) = ListBox1.Items(i) Next For i As Integer = 0 To ListBox1.Items.Count - 1 If i = Too Then ListBox1.Items(i) = A(From) B = True Else ListBox1.Items(i) = A(i - 1) End If Next End Function