こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2008-08-02 17:28:11

QNo.4222779

困ってます

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

元データは


項目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

がセットされます。

投稿日時 - 2008-08-03 09:28:04

補足

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

投稿日時 - 2008-08-03 10:28:41

ANo.3

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>ロードした際のコンボボックスの表示がいきなり
>名前になってしまいますが、
>これを最初は空欄または名前一覧など文字を入れる事は
>可能なのでしょうか?

ComboBox1.DataSource = ad

上記の下に下記を追加

ComboBox1.Text = "名前一覧"

順番を間違いえると名前一覧は、表示されません。

投稿日時 - 2008-08-03 13:57:17

お礼

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

投稿日時 - 2008-08-03 14:33:47

'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

投稿日時 - 2008-08-02 18:21:44

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

投稿日時 - 2008-08-02 18:14:34

お礼

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

投稿日時 - 2008-08-03 09:06:27

あなたにオススメの質問