プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
VB6、リストボックスの処理
なのですが、
(処理)
リストに項目1、項目2を
複数行表示する。
この際項目ごとずれないように
そろえて表示したい。
項目1が半角文字の場合は
リストのFONT指定、FORMAT関数の
使用できちんと処理できるのですが、
項目1に全角文字が来た場合1行目と
それ以降項目1の文字数が違うとずれて
しまいます。
なにかよい方法があったらお知恵を拝借
したいのですが。
よろしくお願いします。

A 回答 (4件)

質問の内容ですが、実例を挙げて説明したほうがよいと思う。


>リストに項目1、項目2を 複数行表示する。
とはどういうことをしようとしているのですか。
ーー
質問の「項目1」などが下記のItemに当たるならば
VBAの場合ですが、(VB6でも同じではないかと思います)
Sub test01()
With Worksheets("Sheet1").ListBox1
.Clear
.AddItem "八王子市"
.AddItem "三鷹市"
.AddItem "武蔵野市"
.AddItem "静岡市"
End With
End Sub
を実行した場合、リストボックス内で
八王子市、三鷹市、・・は先頭がそろいます。
ですから半角文字を含む文字列と全角文字の文字列を結合して
1つのItemにしているとかあるのですか?
    • good
    • 0

私も質問の意味が良く解らないけど、



VBのMID関数は文字数を数えてしまうので、全角と半角が混在した文字列の長さを揃えられない。
と言う質問でしょうか?

バイト数を数えるユーザー定義関数 Bmid を定義しておきます。

Function Bmid(ByVal str As String, start, length)
Bmid = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode)
End Function


ここで  Da$ = "A1B2C345 " なる文字列があるとすると

 Bmid(Da,1,2)  は "A"  を返します。
 Bmid(Da,1,3)  は "A1" を返します。


外れていたら御免。
    • good
    • 0

どうしても1つのListBoxに収めたいなら、ANo.2氏のような


考え方が必要になると思います。
1つでなくても構わないなら、多少面倒にはなりますが
(&見かけが多少変わりますが)以下のような方法も考えられます。
・ListBoxを2つ、横に並べて、スクロールバーが隠れるぐらいに重ねる
 (もちろん右側が前面に来るように)
 以下、左側をList1、右側をList2とします。
・List1に項目1の内容を、List2に項目2の内容を、Indexがシンクロするように
 AddItemするよう処理を記述
・List2_Scrollイベントで、List1.TopIndexをList2と同じ値にするように処理を記述
・List1_Click、List2_Clickイベントで、選択されたときに
 もう片方のListIndexも同じになるように処理を記述

…これで、2つのListBoxのスクロールがシンクロし、選択もシンクロします。
(多少、不恰好かもしれませんが… これならプロポーショナルフォント使おうが
 問題無く並びます)
なお、上のやり方は単独選択の場合です。複数選択を可能にするには
もう少し工夫が必要かと思います。
    • good
    • 0

リストボックスのフォントを等幅のフォントに設定します(例えばMS ゴシック)


list1.additem 項目1 & vbtab & 項目2
こうすれば項目1と項目2が全角文字を含んでも項目の先頭は並びます。
ただし項目1は8バイト未満である必要があります。

もしくは
ColPos = 8
strData = 項目1
List1.AddItem strData & String$(ColPos - LenB(StrConv(strData, vbFromUnicode)), " ") & 項目2
こんな感じですかね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!