- 締切済み
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 宜しくお願い致します。 熊谷
- Kumasan2016
- お礼率94% (36/38)
- Visual Basic
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
すいません、読解力不足でした。 第1欄と第2欄は混ぜてしまいましたので、スプリットするか '呼び出し Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged Dim myst As String = ListBox1.SelectedItem.ToString() Dim myval As Double = Val(myst.Where(Function(C) C Like "[.0-9]").ToArray()) TextBox1.Text = CStr(myval) End Sub 上記のように数字だけ取り出すかしないと実行できません。
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
再び失礼します。 一応配列の例も載せておきます。 Public Class Form1 Private Sub f() Handles MyBase.Shown Dim mydata(,) As String = {{"北海道", "青森県", "宮城県", "東京都"}, {"550", "138", "230", "1360"}} Dim k As Integer For k = 0 To 3 ListBox1.Items.Add(mydata(0, k) & mydata(1, k)) Next End Sub '呼び出し Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged TextBox1.Text = ListBox1.SelectedItem.ToString() End Sub End Class
お礼
何回も申し訳ありません。 まだ私が未熟で最後までできてませんが、本当にありがとうございます。
補足
bybalsendercaseさん 有難うございます。 これで配列で書き込めました。 で、取り出しは後ろの数字550だけTxtBoxに入れたいのですが、splitして”,”の後を取り出さないとダメですか? myData(指定行,1)とかで表示するには? お手数おかけします。
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんにちは 配列ではなくリストで対応しました。 Public Class Form1 Dim myDic As New Dictionary(Of String, Single) Private Sub f() Handles MyBase.Shown '書き込み myDic.Add("北海道", 550) myDic.Add("青森県", 138) myDic.Add("宮城県", 230) myDic.Add("東京都", 1360) For Each itm As KeyValuePair(Of String, Single) In myDic ListBox1.Items.Add(itm.Key & itm.Value) Next End Sub '呼び出し Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged TextBox1.Text = ListBox1.SelectedItem.ToString() End Sub End Class リストは配列より機能が強力です。
お礼
教えて頂いたやり方は別projectに利用させていただきます。 有難うございます。
補足
bybalsendercaseさん 素早いご回答有難うございます。 すっきり読み出せているのですが、質問の仕方が悪かったようです。 欲しいのは、”北海道 550”の550だけ書き出したいのです。文字列をsplitすれば取り出せますが、配列ではできないのかというのも疑問なのです。 教えて頂いたやり方は別projectに利用させていただきます。 有難うございました。 Kumasan2016
関連するQ&A
- VB.NET2010 の多次元配列について
すいません、教えてほしいです! VB.NET2010開発環境を利用しています。 多段配列を多次元配列に入れる方法を教えていただきたいです。 多段配列 Dim myArr1()() ↓ 多次元配列 Dim myArr2( , )
- 締切済み
- Visual Basic
- ArrayListの初期値に二次元配列を設定したい(VB2005)
下記は、aryhogeにTextBoxオブジェクトを格納する処理です。 ---------------------------------------- 'a) Dim hoge()() As TextBox = _ {New TextBox() {txta01, txtb01, txtc01}, _ New TextBox() {txta02, txtb02, txtc02}, _ New TextBox() {txta03, txtb03, txtc03}} Dim aryhoge As New ArrayList 'b) aryhoge.Add(hoge(0)) aryhoge.Add(hoge(1)) aryhoge.Add(hoge(2)) ---------------------------------------- (a)を(b)の初期値として設定するにはどのようにすればよいか、ということが質問内容です。 試しに(b)の部分を以下のようにしてみましたが、「1次元配列の値を変換できない」とのエラーが出ました。 Dim aryhoge As New ArrayList(New TextBox() {hoge(0), hoge(1), hoge(2)}) どうぞよろしくお願い致します。
- ベストアンサー
- Visual Basic
- VB2010でのコントロール多次元配列について
教えてください。 実行中にコントロールを生成したいのですが、 Public Class Form1 Private myTxt(,) As System.Windows.Forms.TextBox Me.myTxt = New System.Windows.Forms.TextBox(59, 2) {} Dim i As Integer Dim j As Integer Dim h As Integer Dim p As Integer h = 10 p = 100 For i = 0 To Me.myTxt.GetLength(0) - 1 For j = 0 To Me.myTxt.GetLength(1) - 1 Me.myTxt(i, j) = New System.Windows.Forms.TextBox Me.myTxt(i, j).Name = "myTxt" + i.ToString() + j.ToString() Me.myTxt(i, j).Size = New Size(100, 30) Me.myTxt(i, j).Location = New Point(p, h) p = p + 100 Next j h = h + 30 Next i Me.myPnl.Controls.AddRange(Me.myTxt) と書くと最後の行が波線になり、 “型 'System.Windows.Forms.TextBox の 2 次元配列' の値を 'System.Windows.Forms.Control' に変換できません。”とエラーになります。 これはAddRangeは多次元配列に使用できないということなのでしょうか? 色々検索してみましたが、コントロールの生成に関する多次元配列が見つけられずに 困っていました。 最後のAddRange(Me.myTxt)をAdd(Me.myTxt(i,j))などと変えたりしても別のエラーになり、 基本的に間違っている気がしますがどこだかがわかりません。 詳しい方、宜しくお願い致します。
- ベストアンサー
- Visual Basic
- 3次元配列の記述
VB6.0を使っています。 2次元配列は以下の様になりますが、3次元配列はどう記述すればいいのでしょうか? Dim phrase(1) As Variant phrase(0) = Array("0-0", "0-1", "0-2") phrase(1) = Array("1-0", "1-1", "1-2")
- ベストアンサー
- Visual Basic
- VB2005 コントロール配列について教えていただけませんか?
現在VB2005を用いてプログラムを行なっている初心者です。 ここのサイトでVB2005ではコントロール配列は使用できないことを知りました。そこで、例えばフォーム上にTextBoxを5個配置して、各TextBoxに入力された値を配列に格納するのにはどのようにすれば良いでしょうか? data(0) = textbox1.text data(1) = textbox2.textと一つずつやるしかないでしょうか・・・ For文などを用いて簡単にできる方法を教えてください。 よろしくお願い致します。
- 締切済み
- Visual Basic
- ”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です。
- ベストアンサー
- Visual Basic
- 100万行位のファイルを出来るだけ速くListBoxに登録したい
vbCrLfで区切られた100万行位のテキストファイルがあり、 これを出来るだけ速くListBoxに登録するには どのような方法が良いでしょうか。 現在はStreamReaderで変数strに読み込んで、 Dim Data() As String = Split(str,vbCrLf)で配列に読み込み、 ListBox1.Items.AddRange(Data) で登録しているのですが、何分もかかってしまいます。 良い方法がありましたら、ご教示頂けると助かります。
- ベストアンサー
- Visual Basic
- VB.netの配列とVB6の配列の違い
VB6で画面を作成し、演算処理を行うDLLをVC6で作成しています。 下記のコードでVB6でSingle型の2次元配列を宣言しま、VCのDLLでエクスポートしている関数に渡 します。 VC6DLL側のコード---------- EXPORT void __stdcall TESTFUNC (float *pfData,long nSize{ } VB側のコード---------- 宣言 Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Long) As Long 配列宣言 Public sngDat(999,1) as single 呼び出し TESTFUNC sngDat(0,0),1000 このように呼び出した場合、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの ポインタをインクリメントした場合、sngDat(0,0),sngDat(1,0),sngDat(2,0)と、1次元目の添え字を インクリメントした状態になるように、メモリに格納されています。 この動作を前提として、VB.net側でも同じように呼び出してみました。 VB.net側のコード---------- 宣言 Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Integer) As Integer 配列宣言 Public sngDat(999,1) as single 呼び出し TESTFUNC(sngDat(0,0),1000) VC側は全く同じコードを利用するとします。 同じように、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの ポインタをインクリメントした場合、sngDat(0,0),sngDat(0,1),sngDat(1,0)と,sngDat(1,1)、と1次元目の添え字を インクリメントせず、2次元目の添え字をインクリメントした状態になるように、メモリに格納されています。 VB6→VC6のDLLの場合の配列渡しと、VB.net→VC6のDLLの場合の配列渡しで違いがあるのは 何故でしょうか?また、VB.net側の配列渡しの仕様を、VB6側の仕様に合わせる方法は無いのでしょうか? よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- 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のエラーが出てしまったりするのですが、 このような場合により適切な方法がありましたらご教授頂けないでしょうか。 宜しくお願いいたします。
- ベストアンサー
- Visual Basic
- Functionの戻り値を2次元配列にする方法
VB.NETを使いはじめた初心者です。 Functionの戻り値を2次元配列にして データを取得したいのですが、 「Doubleの1次元配列はDoubleから派生していないためDoubleの1次元配列の1次元配列の値をDoubleの2次元配列に変換できません」とエラーがでます。 どのように変更すればよいでしょうか。 ご教授願います。 Function f1 As Double()() Dim temp(2,3) As Double ・・・・・ Return temp End Function
- ベストアンサー
- Visual Basic
お礼
bybalsendercaseさん 何回も有難うございました。 とても迅速なご回答頂き感謝しております。
補足
bybalsendercaseさん このやり方で上手く行きました。 有難うございました。