comboxのリストをファイルから読み込む方法

このQ&Aのポイント
  • フォーム1にコンボボックス1があります。フォーム1をロードした際に、コンボボックス1にTextFile1.txtのリストを表示したいのですが、上手くいきません。
  • TextFile1.txtは、名前,住所,電話番号,,,,というように区切られていて、コンボボックスには名前だけを表示させたいと思います。使用しているソフトは、VisualBasic2008ExpressEditionで、WinXPを使っています。
  • 一応下記が現状のコードです。自分ではヘルプ・入門書などを見て書いてみましたが、行き詰ってしまいました。よろしくお願い致します。
回答を見る
  • ベストアンサー

comboxのリストをファイルから読み込む方法

最近始めたばかりなのですが、よろしくお願い致します。 フォーム1にコンボボックス1があります。 フォーム1をロードした際に、コンボボックス1にTextFile1.txtのリストを表示したいのですが、上手くいきません。 TextFile1.txtは、名前,住所,電話番号,,,,というように区切られていて、コンボボックスには名前だけを表示させたいと思います。 使用しているソフトは、VisualBasic2008ExpressEditionで、WinXPを使っています。 一応下記が現状のコードです。自分ではヘルプ・入門書などを見て書いてみましたが、行き詰ってしまいました。よろしくお願い致します。 Imports System.IO -------------------------------- Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Reader As New IO.StreamReader("C:\Documents and Settings\ob\デスクトップ\WindowsApplication3\WindowsApplication3\TextFile1.txt") Dim items() As String   Dim line As String = Reader.ReadLine ComboBox1.Text = "名前一覧" '初期表示 ComboBox1.Items.Add(Reader.ReadLine()) End Sub End Class

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

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.3

元データは 項目1-1,項目1-2,項目1-3,項目1-4,項目1-5 項目2-1,項目2-2,項目2-3,項目2-4,項目2-5 項目3-1,項目3-2,項目3-3,項目3-4,項目3-5 項目4-1,項目4-2,項目4-3,項目4-4,項目4-5 上記のデータのファイル名 textcsv.csv Dim fn As String = "C:\Documents and Settings\****\My Documents\excel雑\textcsv.csv" Dim dline() As String Dim d() As String Dim ad As ArrayList = New ArrayList() Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default) dline = Split(read.ReadToEnd, vbCrLf) For i As Integer = LBound(dline) To UBound(dline) d = Split(dline(i), ",") ad.Add(d(0)) Next ComboBox1.DataSource = ad comboに 項目1-1 項目2-1 項目3-1 項目4-1 がセットされます。

lobin_2008
質問者

補足

ご回答ありがとうございます。 名前を表示させる事ができました。 ロードした際のコンボボックスの表示がいきなり名前になってしまいますが、これを最初は空欄または名前一覧など文字を入れる事は可能なのでしょうか? 単純にテキストファイルの一行目に名前一覧,といれても表示はされませんでした。 素人考えで申し訳ございませんが、アドバイスいただけますでしょうか。よろしくお願い致します。

その他の回答 (3)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.4

>ロードした際のコンボボックスの表示がいきなり >名前になってしまいますが、 >これを最初は空欄または名前一覧など文字を入れる事は >可能なのでしょうか? ComboBox1.DataSource = ad 上記の下に下記を追加 ComboBox1.Text = "名前一覧" 順番を間違いえると名前一覧は、表示されません。

lobin_2008
質問者

お礼

ご回答ありがとうございます。 また、ここから頑張ってプログラムを組んでいこうと思います。 御丁寧にありがとうございました。

回答No.2

'PersonalInformationクラスを若干変更 Class PersonalInformation Private PersonName As String Private PersonAddress As String Private PersonPhoneNumber As String Sub New(info As String()) If info.Length <> 3 Then throw new System.ArgumentException End If '本当はここでValidateしたい Me.Name = info(0) Me.Address = info(1) Me.PhoneNumber = info(2) End Sub Public Overrides Function ToString() As String Return Me.Name() End Function Public Property Name() As String Get return PersonName End Get Set(s As String) PersonName = s End Set End Property Public Property Address() As String Get return PersonAddress End Get Set(s As String) PersonAddress = s End Set End Property Public Property PhoneNumber() As String Get return PersonPhoneNumber End Get Set(s As String) PersonPhoneNumber = s End Set End Property End Class

回答No.1

Option Strict On Option Compare Binary Option Infer Off 'デフォルトインスタンスが嫌いなため, 'コンソールアプリケーションとして作成したので '多分そのままコピペしても動作しないでしょう。 '参照設定としてSystem.Windows.Forms.Formも改めて加えなおさないといけないし。 'とは言え,ソースを順に眺めれば何やっているかぐらいはわかると思います。 '利用したテキストファイルは以下の通りUTF-8で書かれています。 'http://www.geocities.jp/tokusa5802/chara/teacher1.html 'を利用しました。 '土井半助,福原,0123-4567-7890 '山田伝蔵,氷ノ山,0246-8024-6802 Class Q4222779A Inherits System.Windows.Forms.Form Private ListBox1 As System.Windows.Forms.ListBox Sub New() Me.Width = 800 Me.Height = 600 ListBox1 = New System.Windows.Forms.ListBox() ListBox1.Width = 600 ListBox1.Height = 500 ListBox1.Left = 100 ListBox1.Top = 0 '面倒なので例外処理は一切省略。 Dim Reader As New System.IO.StreamReader(".\Q4222779-1.txt",System.Text.Encoding.GetEncoding(65001)) 'UTF-8 Do While Not Reader.EndOfStream Dim Data As String() '単純にカンマで行を区切っているだけなので 'CSVみたく,項目内に改行やカンマがあるケースは一切考慮していない Data = Reader.ReadLine().Split(","C) ListBox1.Items.Add(New PersonalInformation(Data)) Loop Me.Controls.AddRange(New System.Windows.Forms.Control(){ListBox1}) End Sub Shared Sub Main() Dim Form1 As Q4222779A Form1 = New Q4222779A() Form1.ShowDialog() End Sub End Class Class PersonalInformation Private PersonName As String Private PersonAddress As String Private PersonPhoneNumber As String Sub New(info As String()) If info.Length <> 3 Then throw new System.ArgumentException End If '本当はここでValidateしたい PersonName = info(0) PersonAddress = info(1) PersonPhoneNumber = info(2) End Sub Public Overrides Function ToString() As String Return PersonName End Function End Class

lobin_2008
質問者

お礼

早速の回答ありがとうございます。 なんとなくやってる事がわかるような気がするものの、まだまだ勉強不足だと痛感しました。 回答いただきました物を参考に、勉強しようと思います。

関連するQ&A

  • VB2008

    VB初心者です、よろしくお願いいたします。 現在、VB2008を使い、顧客名簿を作成しています。 前回の質問で、テキストファイルのファイル名だけを取得する方法は分かったのですが、そのファイルの内容をテキストボックスに表示する方法がうまくいきません。 ファイルの内容は 1行目→名前 2行目→メールアドレス 3行目→郵便番号 4行目→住所 5行目→購入した商品 をそれぞれ、textbox1~5に表示させたいと思っています。 書籍などで調べた結果 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim totalcount As Integer Dim oneline As String Dim sr As System.IO.StreamReader sr = New System.IO.StreamReader("C:hogehoge\" & ComboBox1.Text & ".txt") oneline = sr.ReadLine() sr.Close() Dim skipline As Integer Dim r As Random = New Random() skipline = r.Next(totalcount) sr = New System.IO.StreamReader("C:hogehoge\" & ComboBox1.Text & ".txt") Dim i As Integer = 0 Do While i < skipline sr.ReadLine() i += 1 Loop oneline = sr.ReadLine() sr.Close() TextBox1.Text = oneline TextBox2.Text = (skipline + 1).ToString() End Sub このような記述になりました。 textbox1には問題なく名前が表示されますが、textbox2には"1"と表示されてしまいます。 すみませんが、修正箇所を教えていただけませんか? よろしくお願いいたします。

  • csvの読み込みがうまく行かない

    こんにちは。質問させていただきます。 (Visual Basic 2010 エクスプレス) 下記のように書いたのですが、ファイルの内容どおりに読み込んでくれません。 ファイルの中身は さささ,0,ししししししし すすす,0,せせせせせせ そそそ,0,たたたたた となっているのですが、最初の一行を読み込み、しかも最初の一行を繰り返し2段目3段目の テキストボックスに表示させてしまいます。 具体的には さささ ししししししし さささ ししししししし さささ ししししししし です。 本来は さささ ししししししし すすす せせせせせせ そそそ たたたたた と表示させたいのです。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Using reader As New System.IO.StreamReader("C:\csvtest\test.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items() As String 'CSVの各項目を表す配列 Dim Line As String = reader.ReadLine 'CSVの一行 Do Until IsNothing(Line) Items = Line.Split(",") '一行を, (カンマ)で区切って項目ごとに分解 With reader TextBox1.Text = Items(0) CheckBox1.CheckState = Items(1) TextBox2.Text = Items(2) Line = reader.ReadLine '次の行を読み込む。 TextBox3.Text = Items(0) CheckBox1.CheckState = Items(1) TextBox4.Text = Items(2) Line = reader.ReadLine '次の行を読み込む。 TextBox5.Text = Items(0) CheckBox1.CheckState = Items(1) TextBox6.Text = Items(2) Line = reader.ReadLine '次の行を読み込む。 .Close() End With Loop End Using End Sub 問題点がわかる方、よろしくおねがいします!

  • VB OpenFileDialogと読み込み

    OpenFileDialogを使用したテキストファイルの読み込みについて質問します。 TextFile.txt, TextFile2.txt, TextFile3.txt(内容は名前,電話番号)というファイルがあるとし、OpenFileDialogで選択してラベルまたはテキストボックスに表示させたいのですが、TextFile.txti以外のファイルを選んでもTextFile.txtの内容が表示されます。 VBの本に載っている二つのコードをそのまま使用してみました。 Imports Microsoft.VisualBasic.FileIO Public Class Form1 ' decrare modul level variable 'モジュールレベルの宣言 Private NamePhoneTextFieldParser As TextFieldParser Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Instatiate the ThextFieldPerser and set the deliminate 'Deliminateの設定とか Dim Filestring As String = "TextFile.txt" Try NamePhoneTextFieldParser = New TextFieldParser(Filestring) NamePhoneTextFieldParser.TextFieldType = FieldType.Delimited NamePhoneTextFieldParser.SetDelimiters(",") Catch ex As Exception MessageBox.Show("Unable to read the file:" & Filestring, "File Error") End Try End Sub Private Sub OFDBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OFDBtn.Click Dim ReponseDialogResult As DialogResult Dim stream As System.IO.Stream ' Set up and display the OpenFileDialog 'OpenFIleDialogのセットアップ With OpenFileDialog1 .FileName = "TextFile.txt" .Title = "Directory for File" .Filter = "Text File (*.txt)|*.txt|All Files (*.*)|*.*" 'DIsplay Dialog Box ReponseDialogResult = .ShowDialog If ReponseDialogResult = DialogResult.OK Then stream = OpenFileDialog1.OpenFile() Else Exit Sub End If '電話番号と名前をファイルから読み取る On Error Resume Next Dim FieldString() As String ' Must be a strng array for deliminated fields If Not NamePhoneTextFieldParser.EndOfData Then FieldString = NamePhoneTextFieldParser.ReadFields() ' 最初の Field Nametxt.Text = FieldString(0) '二番目の Field Phonetxt.Text = FieldString(1) Else MessageBox.Show("No more records to display.", "End of Data") End If End With End Sub End Class です。 Dim Filestring As String = "TextFile.txt" NamePhoneTextFieldParser = New TextFieldParser(Filestring) または .FileName = "TextFile.txt" のどれかが影響しているのかなと疑っているのですが(特に前者)、合ってますでしょうか? 上記のコードでTextFile.txtを指定してしまっているのを、TextFile2.txt, TextFile3.txtと自分で選択したものを読み込ませて表示させたい場合、どう記述を変更したらよいでしょうか? ちなみにいずれのテキストファイルもカンマで区切られた一組の名前と電話番号です。

  • コンボボックスのドロップダウンで選択する文字列と選択後の文字列を変更し

    コンボボックスのドロップダウンで選択する文字列と選択後の文字列を変更したいです。 ComboBox1.Items.Add("ID : NAME") Private Sub ComboBox1_Validated(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles ComboBox1.Validated ComboBox1.Text = "ID" End Sub これでコンボのフォーカスを外せば表示が"ID"になりますが、選択後は"ID : NAME"のままです。 イベント内で別のコントロールにフォーカスを当てようとしても無理でした。 なにか方法はないでしょうか? ownerdrawで複数列を持たせる方法でやりたいことはできるのですが、 この方法はわけあって避けたいと考えています。

  • コンボボックスのインデックス値取得について

    Visual Stdio 2008 Express Editionを使ってVBの勉強をしています。 コンボボックスのことについてお伺いしたいことがあり、 投稿させていただきました。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ComboBox1 .Items.Add("りんご") .Items.Add("みかん") .Items.Add("なし") End With End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("コンボボックスで選択した項目のインデックス") End Sub End Class コンボボックスで「みかん」を選択し、 ボタンを押下したときに、「みかん」のインデックス値として 「1」を出力させたいのですが、この表示方法がわからない状態です。 VB6.0であれば、ItemDataプロパティを使えばうまくいくと 思うのですが、VisualStudioだとどのプロパティを用意すれば よろしいのでしょうか。 ご教授の程お願い致します。

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

    いつもお世話になっています。 今、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

  • JISコードにエンコードすると、半角カタカナが全角になってしまう

    VB2005を使っています。 本を参考に「JISコードに変換する」コードを 記述してみましたが、どうも半角カタカナが全角になってしまうようです。 以下のようなコードです、 ご存知の方、よろしくお願いいたします。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '元の文字列 TextBox1.Text = "コネコ" '←ここの「コネコ」は半角で。 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim TextFile As IO.StreamWriter Dim Data() As Byte 'JISコードに変換 Data = Encoding.GetEncoding("iso-2022-jp").GetBytes(TextBox1.Text) 'ファイルに文字列を書き込む TextFile = IO.File.AppendText("C:\TEST.TXT") TextFile.Write(ChgString(Data)) TextFile.Close() MsgBox("osimai") End Sub Private Function ChgString(ByVal bytString As Byte()) As String Dim intCnt As Integer ChgString = "" For intCnt = 0 To UBound(bytString) ChgString &= Chr(bytString(intCnt)) Next End Function

  • VB2008 comboboxを連動させた際のエラー

    先日より取り組んでいる顧客検索プログラムですが、combobox1でササキを選ぶとcombobox2には北海道、combobox3には札幌市と表示させたいと思います。先日もアドバイスをいただきそれを参考にすすめていますが、「'0' の InvalidArgument=Value は 'SelectedIndex' に対して有効ではありません。 パラメータ名: SelectedIndex」というエラーが出てしまいどうしても解決出来ません。このエラーの後さらにデバッグすると思ったとおりに動作するのですが、エラーを解決するにはどう対処すると良いのでしょうか?下記が現在のソースとなります。どうかアドバイスをお願い致します。 ササキ,北海道,札幌市, スズキ,東京都,あきる野市, サトウ,愛知県,名古屋市, ハヤシ,北海道,旭川市, が TextFile1.txtです。 Imports System.IO ------------ Public Class Form1 Private Sub Form1_Load(省略~ Dim fn As String = "C:\TextFile1.txt" Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default) Dim dline() As String Dim namelist As ArrayList = New ArrayList() Dim adr1list As ArrayList = New ArrayList() Dim adr2list As ArrayList = New ArrayList() dline = Split(read.ReadToEnd, vbCrLf) Dim srcary() As String Dim i As Integer For i = LBound(dline) To UBound(dline) srcary = Split(dline(i), ",") namelist.Add(srcary(0)) adr1list.Add(srcary(1)) adr2list.Add(srcary(2)) Next ComboBox1.DataSource = namelist ComboBox1.SelectedIndex = -1 ComboBox1.Text = "名前" ComboBox2.DataSource = adr1list ComboBox2.SelectedIndex = -1 ComboBox2.Text = "住所1" ComboBox3.DataSource = adr2list ComboBox3.SelectedIndex = -1 ComboBox3.Text = "住所2" End Sub ------------- Private Sub ComboBox1_SelectedIndexChanged(省略~ If ComboBox1.SelectedIndex > -1 Then ComboBox2.SelectedIndex = ComboBox1.SelectedIndex Else ComboBox2.Text = "" End If End Sub

  • キューとコンボボックスの使い方  VB2008

    VB2008を使っています。 キューとコンボボックスの使い方がわからないのですが、以下のソースで (1)キューとデータソースを使う。 Dim queue As Queue = New Queue(20) For i As Integer = 0 to 9 queue.Enqueue( i.ToString() ) Next i ComboBox1.DataSource = queue.ToArray ComboBox2.DataSource = queue.ToArray (2)べたな方法 ComboBox1.Items.Clear() For i As Integer = 0 to 9 ComboBox1.Items.Add( i.ToString() ) Next i ComboBox2.Items.Clear() For i As Integer = 0 to 9 ComboBox2.Items.Add( i.ToString() ) Next i ------------------------ (1) (1)と(2)は厳密にどのように違うのでしょうか? (2) (1)で心配なのは、キューの上限を20にしていて、実際使っているのは10個で後は空です。 この状態で、コンボボックスのDataSourceにセットした場合、(2)と同じように10件だけになっているのでしょうか? (3) (1)は同じキューを使いまわしています。コンボボックス1と2は独立して使えるのでしょうか?(データは同じです。)

  • VB2008 コンボボックスとテキストボックスの連動について

    VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。 項目1-1,項目1-2,項目1-3,項目1-4,項目1-5 項目2-1,項目2-2,項目2-3,項目2-4,項目2-5 項目3-1,項目3-2,項目3-3,項目3-4,項目3-5 上記のデータ名 TextFile1.txt Dim fn As String = "C:\TextFile1.txt" Dim dline() As String Dim d() As String Dim ad As ArrayList = New ArrayList() Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default) dline = Split(read.ReadToEnd, vbCrLf) For i As Integer = LBound(dline) To UBound(dline) d = Split(dline(i), ",") ad.Add(d(0)) Next ComboBox1.DataSource = ad ComboBox1.text="顧客名" 以上が現在の状況です。 comboに項目1-1,2-1,3-1とセットされていますが、マウスのスクロールボタンを動かすと、項目1-1が最初に表示されず2-1が表示されます。通常にクリックして選択すると問題は無いのですが、出来ればマウスのスクロールボタンも使いたいと思いますが解決方法はあるのでしょうか。 もう1件お伺いしたいのですが、上記テキストファイルからデータを読込、項目1-2,1-3,1-4,1-5、項目2-2・・・、項目3-2・・・と、項目毎にコンボボックスと連動させて各テキストボックス1、2、3、4に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。

専門家に質問してみよう