アクセスのデータをリストボックスに複数列、列の先頭をそれぞれ揃えて表示したいのですが。。。
2列目の「かな」が1文字または2文字だとあとの3列目、4列目がずれてしまいます。
コードが問題なのでしょうか?
それとも他に考えられる原因があるのでしょうか?
ID かな 保険種類 証券番号
-----------------------------------------------
1 たけだ 自動車保険 1111-1111 |
2 こやま 自動車保険 2222-2222 | ←リストボックス
3 わだ 自動車保険 3333-3333 |
4 たけおか 自動車保険 4444-4444 |
: |
: |
-----------------------------------------------
<コード>
Private Sub Command1_Click()
List1.Clear
Dim mdb As Database
Dim SQL As String
Dim mrs As Recordset
Dim textID As Integer
textID = Val(Text1.Text)
'データベースをオープン
Set mdb = OpenDatabase("顧客契約2.mdb")
'text1が入力されていたら
If Text1.Text <> "" And Text2.Text = "" And Text3.Text = "" And Text4.Text = "" Then
'選択クエリーを取得
SQL = "select 顧客TBL.顧客ID,顧客TBL.顧客かな,契約TBL.保険種類,契約TBL.証券番号 from 顧客TBL left join 契約TBL on 顧客TBL.顧客ID = 契約TBL.顧客ID where 顧客TBL.顧客ID = " & textID & " "
'条件に一致するレコードを取得
Set mrs = mdb.OpenRecordset(SQL, dbOpenDynaset)
'データがなければ
If mrs.RecordCount = 0 Then
MsgBox "データがみつかりません"
End If
i = 0
With List1
Do Until mrs.EOF
'リストボックスに取得したレコードを追加
List1.AddItem Left(mrs.Fields("顧客ID") & Space(3), 3) + vbTab + Left(mrs.Fields("顧客かな") & Space(10), 10) + vbTab + Left(mrs.Fields("保険種類") & Space(10), 10) & "" + vbTab + mrs.Fields("証券番号") & ""
i = i + 1
mrs.MoveNext
Loop
End With
mrs.Close
End If
どんな原因が考えられるのでしょうか?
よろしくお願いします。
ListBox ではなく、ListView では駄目なのでしょうか?
詳細表示にして、列ヘッダ無しの行全体選択モードに指定しておけば、
列数を指定可能なリストボックスとして利用できますけど。
かなが全角なのに対し、空白が半角だからではないでしょうか
魔界の仮面弁士様
ありがとうございます。
>ListBox ではなく、ListView では駄目なのでしょうか?
listviewでもいいのですが、今回の原因が知りたくて。。。
通ってみた様
ありがとうございます。
>かなが全角なのに対し、空白が半角だからではないでしょうか
入力している文字を確認しましたが半角の空白が原因ではないようです。。
おそらく、ListBoxのTabの動作によるのでしょうね。
「LB_SETTABSTOPS Message」
(http://msdn2.microsoft.com/en-us/library/ms671443.aspx)
にあるように、
----------------------------------------------------------
(略)the number of quarters of the average character width(略)
(略)the default tab stop is two dialog template units(略)
----------------------------------------------------------
どこでTabが動作するかは、「フォントの平均幅」を基準によって決まります。
つまり、「(平均フォント幅より)幅の狭い文字」を多用するとTab位置に届かないということになります。
#逆に「(平均フォント幅より)幅の広い文字」を多用する1つ次のTab位置まで言ってしまうことも・・・
固定幅のフォントを使ってみてはどうでしょう?
> 固定幅のフォントを使ってみてはどうでしょう?
あ! これで実際にやってみると、逆に文字数が多い場合、ずれてしまいますね。
となると、Spaceの付加は止めて、前述の「LB_SETTABSTOPS Message」で、
Tab位置を指定するのが確実かも。
みなさんたくさんアドバイスありがとうございます。
大吉末吉様
<となると、Spaceの付加は止めて、前述の「LB_SETTABSTOPS Message」で、
<Tab位置を指定するのが確実かも。
教えていただいたところ
を読んでみたのですがわからなかったのでいろいろ試したところ、
<列の位置がずれてしまっていたときのコード>
List1.AddItem Left(mrs4.Fields("顧客ID") & Space(3), 3) _
+ vbtab + Left(mrs4.Fields("顧客かな") & Space(10), 10) _ ←10から11にかえた。
+ vbtab + Left(mrs4.Fields("保険種類") & Space(10), 10) & "" _
+ vbtab + mrs4.Fields("証券番号") & ""
↓ ↓
<列の位置が揃ったときのコード>
List1.AddItem Left(mrs4.Fields("顧客ID") & Space(3), 3) _
+ vbtab + Left(mrs4.Fields("顧客かな") & Space(10), 11) _ ←
+ vbtab + Left(mrs4.Fields("保険種類") & Space(10), 10) & "" _
+ vbtab + mrs4.Fields("証券番号") & ""
2列目(顧客かな)の left関数の取り出す文字列の文字数を変えたところ
2列目が2文字のときも他の行と揃いました!
これは11文字の他に、取り出す文字数を変えると列が揃ったり揃わなかったりいろいろ変わってしまって
11文字がきれいにそろったので11にしたのです。
しかし、原因がわかりません。
だれかわかる方教えてくださ〜い・・
> 2列目が2文字のときも他の行と揃いました!
1文字の時もちゃんと揃いますか?
> しかし、原因がわかりません。
・・・原因は、既に言いましたけど・・・
ためしに、
-----------------------------------------------------------
Private Sub Form_Load()
Dim i As Long
For i = 1 To 10
List1.AddItem Left(i & Space(3), 3) _
+ vbTab + Left(String(i, "あ") & Space(10), 10) + "." _
+ vbTab + "3列目"
Next
For i = 1 To 10
List1.AddItem Left(i & Space(3), 3) _
+ vbTab + Left(String(i, "あ") & Space(10), 9) + "." _
+ vbTab + "3列目"
Next
End Sub
-----------------------------------------------------------
こういうプログラムを実行してみてください。
#最後のSpaceを"."に変えたものです。
「.」の位置がそろっていないですよね?
大吉末吉様
ありがとうございます。
1文字の時、ずれてしまいました・・・・
教えていただいたコードでためしたところ
おっしゃるとおり"."がずれていました。
tabの位置を指定すればいいのでしょうか?
どうしたらいいのかわかりません(><)
> tabの位置を指定すればいいのでしょうか?
既に返答済みですので、改めて言うまでも無いですね。
> となると、Spaceの付加は止めて、前述の「LB_SETTABSTOPS Message」で、
> Tab位置を指定するのが確実かも。
それから、
> どうしたらいいのかわかりません(><)
って、
> >ListBox ではなく、ListView では駄目なのでしょうか?
> listviewでもいいのですが、今回の原因が知りたくて。。。
「理由が知りたい」だけなんじゃなかったんですか?
#「ListView」にすれば済むんですよね?
念の為、
LB_SETTABSTOPS のサンプルが載っているページを紹介しておきます。
「PRB: Cannot Set TabStops in ListBox Using SendMessage API」
(http://support.microsoft.com/kb/183518/en-us)
#「Styleを『チェックボックス』にすると『LB_SETTABSTOPS』が使えないよ」という趣旨のページですが・・・
タブ位置&個数は調整してください。
大吉末吉様
ほんとにありがとうございます。
お手数かけさせてすみませんでした・・・
ツイート | ![]() |