質問するのは、初めてですが…。
いつもお世話になってます。
この掲示板でよく助けられています。
さっそく質問させて下さい。
画面上に、
・テキストボックス1(ファイル名)
・テキストボックス2(ファイル名)
・コンボボタン
・リストボックス
の計4つがあります。
リストボックスには以下の用に出力させたいです。
1.テキストボックス1で入力したファイル名(拡張子無)
テキストボックス1
テキストボックス2
2.リストボックスは1行表示なので、スペースをうまく使い、
1番の値を表示させます。
例)テキストボックス1 = test.txt
テキストボックス2 = テスト.txt
リストボックス = test テスト.txt test.txt
桁数 = 1234567890 12345678901234567890 12345678901234567890
一応、半角のみだと動くのですが…。
テキストボックス2の"テスト"が半角同様の動きになり、表示位置がずれてしまいます。
※グリットにすれば簡単かもしれませんが、その後の処理に影響する為、どうしてもリストボックス使用になりました。
何かアドバイス頂けたら嬉しいです。
ソースは長くなるので、次に記述します。
宜しくお願い致します。
■ソース■
'=====================================================================
'パスより、ファイル名のみを取得
'≪引数≫
' sText1 = (テキストボックス)ファイル名1
' sText2 = (テキストボックス)ファイル名2
'≪戻り値≫
' Get_FileName = リストボックス表示
'=====================================================================
Private Function Get_FileName(ByVal sText1 As String, ByVal sText2 As String) As String
'FileSystemObject(FSO)の新しいインスタンスを生成します。
Dim cFso As FileSystemObject
Set cFso = New FileSystemObject
'ファイル名(ベース名,拡張子)を格納する変数
Dim sBaseName As String 'ベース名格納
Dim sTextFileName1 As String 'テキスト1のファイル名格納
Dim sTextFileName2 As String 'テキスト2のファイル名格納
'リストボックス表示時の間隔を格納する変数
Dim sBaseName_sp As String 'ベース名 + スペース(10バイト)
Dim sTextFileName1_sp As String 'テキスト1のファイル名 + スペース(20バイト)
Dim sTextFileName2_sp As String 'テキスト2のファイル名 + スペース(20バイト)
'リストボックス表示時の間隔を判定結果を格納する変数
Dim sBN_Length As Long 'ベース名+スペースの文字長
Dim sTF1_Length As Long 'テキスト1のファイル名+スペースの文字長
Dim sTF2_Length As Long 'テキスト2のファイル名+スペースの文字長
'ファイル名を取得
sTextFileName1 = cFso.GetFileName(sText1)
sTextFileName2 = cFso.GetFileName(sText2)
'ベース名を取得
sBaseName = cFso.GetBaseName(sTextFileName1)
'ファイル or ベース名 + スペースを格納
sBaseName_sp = sBaseName & Space(10)
sTextFileName1_sp = sTextFileName1 & Space(20)
sTextFileName2_sp = sTextFileName2 & Space(20)
'ファイル or ベース名 + スペースの文字長さを取得
sBN_Length = LenB(StrConv(sBaseName_sp, vbFromUnicode))
sTF1_Length = LenB(StrConv(sTextFileName1_sp, vbFromUnicode))
sTF2_Length = LenB(StrConv(sTextFileName2_sp, vbFromUnicode))
If sBN_Length <> 10 Then
sBaseName_sp = Left(sBaseName_sp, 10)
End If
If sTF1_Length <> 20 Then
sTextFileName1_sp = Left(sTextFileName1_sp, 20)
End If
If sTF2_Length <> 32 Then
sTextFileName2_sp = Left(sTextFileName2_sp, 20)
End If
Get_FileName = sBaseName_sp & Space(2) & sTextFileName2_sp & Space(2) & sTextFileName1_sp
Set cFso = Nothing
End Function
書き忘れました!
環境はVB6を使用しています。
すみません。
ListBox でなければならないのでしょうか?
ListView や MSHFlexGrid を使った方が良い気がしますけれども…。
たとえば、ListView コントロール(エクスプローラの右側)を
詳細表示、列ヘッダ表示無し、行全体を選択というモードで利用するとか。
Private Sub Form_Load()
ListView1.View = lvwReport
ListView1.LabelEdit = lvwManual
ListView1.FullRowSelect = True
ListView1.HideColumnHeaders = True
'列幅決定
ListView1.ColumnHeaders.Clear
ListView1.ColumnHeaders.Add().Width = 720
ListView1.ColumnHeaders.Add().Width = 1440
ListView1.ColumnHeaders.Add().Width = 1440
'「test」「テスト.txt」「test.txt」を登録
With ListView1.ListItems.Add(Text:="test").ListSubItems
.Add Text:="テスト.txt"
.Add Text:="test.txt"
End With
End Sub
魔界の仮面弁士様
回答ありがとうございます。
私も<MSHFlexGrid>がいいと思ったのですが、
現在作成中のプログラムは私と、別の方との2人で作成していまして…。
私が画面(+大まかな動作)、別の方が中身の処理を作成しているんです。
なので、その方の強い要望により、<ListBox>限定になりました。
<ListView>は初めて聞いた単語です。
今後の為に、勉強させていただきます!!
ありがとうございます。
MSHFlexGrid の場合、ListBox とは見た目が大きく異なりますが、
> たとえば、ListView コントロール(エクスプローラの右側)を
> 詳細表示、列ヘッダ表示無し、行全体を選択というモードで利用するとか。
であれば、見た目は殆ど変わらなくなりますよ。
ListBox で行うのであれば、せめてタブ区切りにされては如何でしょう?
Option Explicit
Private Declare Function SendMessageA Lib "user32" _
(ByVal hWnd As OLE_HANDLE, _
Optional ByVal m As Long = &H192&, _
Optional ByVal wParam As Long, _
Optional ByRef lParam As Long) As Long
Private Sub Form_Load()
SetTabPos List1, 80, 150
End Sub
Private Sub Command1_Click()
List1.AddItem "test" & vbTab & "テスト.txt" & vbTab & "test.txt"
List1.AddItem "試験方法" & vbTab & "評価.txt" & vbTab & "sample.txt"
List1.AddItem "LB_SETTABSTOPS" & vbTab & "Function.txt" & vbTab & "API.txt"
End Sub
Private Sub SetTabPos(ByVal ListBox As ListBox, ParamArray tabPos() As Variant)
Dim t() As Long, c As Long, v As Variant
ReDim t(UBound(tabPos) + 1)
For Each v In tabPos
t(c) = CLng(v)
c = c + 1
Next
SendMessageA ListBox.hWnd, , c, t(0)
End Sub
おそくなりました!!
ありがとうございます。
なんとか、出来ました!!
魔界の仮面弁士さんが言ってたようにタブ区切りにした方が、
断然きれいでした!!
本当にありがとうございます。
ツイート | ![]() |