tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルListBox内での表示
記事No2208
投稿日: 2005/09/21(Wed) 16:11
投稿者じゅん
[OSのVer]:WindowsXP    [VBのVer]:VB.NET

またまた投稿させていただきます。
以前の投稿の続きみたいなものですが。
SQLSevrからListBoxに条件を指定して表示させているのですが、ちょっと困ったことに・・・
txt商品とtxt数量に値を入れると商品と数量を表示するのですが、商品の文字数(?)によって商品名の
横に表示される数量がずれてしまいます。これをなんとか数量の縦の表示をそろえたいのですが。ど
うしたらいいのでしょうか?
<今の表示の際のコード>

Private Sub txt数量_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Handles txt数量.TextChanged

        Try
            If Me.txt商品.Text = "" Then
                MessageBox.Show("商品コードが入力されていません")
                Exit Sub
            End If

            list商品.Items.Clear()
            Me.m_ShohinCodes.Clear()
            Me.SetSyohinMaster(Me.txt商品.Text, False)
            For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1
                Me.m_ShohinCodes.Add(CType(Me.m_TestDt.Rows(i)("商品コード"), Str
ing))
                list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _
                 + StrDup(15, " ") _
                 + CType(Me.m_TestDt.Rows(i)("数量"), String))
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        list商品.Enabled = True
        btn修正.Enabled = True
        btn削除.Enabled = True
        btn送信.Enabled = True

        Try
            If Me.txt商品.Text = "" Then
                MessageBox.Show("商品コードが入力されていません")
                Exit Sub
            End If
            If Me.txt数量.Text = "" Then
                MessageBox.Show("数量が入力されていません")
                Exit Sub
            End If

            list商品.Items.Clear()
            Me.m_ShohinCodes.Clear()

            Me.SetSyohinMaster(Me.txt商品.Text, True)
            For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1
                Me.m_ShohinCodes.Add(CType(Me.m_TestDt.Rows(i)("商品コード"), Str
ing))

                list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _
                 + StrDup(15, " ") _
                 + CType(Me.m_TestDt.Rows(i)("数量"), String))
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        

    End Sub  

<表示結果>
ビビンバ---------3
ホルモン----------4
焼野菜----------4
骨付きカルビ-----5
のように数量がずれて表示される
<これを>
ビビンバ--------3
ホルモン--------4
焼野菜----------4
骨付きカルビ----5

-------は気にしないでください(スペースが使えなかったので(笑))
のように数量をそろえて表示させたいので。
よろしくお願いします。


 

[ツリー表示へ]
タイトルRe: ListBox内での表示
記事No2209
投稿日: 2005/09/21(Wed) 16:11
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  

[ツリー表示へ]
タイトルRe: ListBox内での表示
記事No2210
投稿日: 2005/09/21(Wed) 16:16
投稿者花ちゃん
下記が参考になるかと。

ListBoxに複数の項目を指定位置に揃えて表示
hhttp://www.bcap.co.jp/hanafusa/dotnet/listbox1.htm

[ツリー表示へ]
タイトルRe^2: ListBox内での表示
記事No2211
投稿日: 2005/09/21(Wed) 17:08
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET
参考にしてやってみましたが・・・  
>list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _
>+ StrDup(15, " ") _
>+ CType(Me.m_TestDt.Rows(i)("数量"), String))

+ StrDup(15, " ") _
の部分をfStrCut(15," ") _
にしたのですが、実行エラーが出ました。
<エラー内容>
ex={System.InvalidCastException}
文字列" " から型'Integer'へのキャストが有効ではありません

どうしたらいいでしょうか?

[ツリー表示へ]
タイトルRe^3: ListBox内での表示
記事No2213
投稿日: 2005/09/21(Wed) 17:52
投稿者なおこ(・∀・)
お世話になります。

fStrCutの引数をよく見ましょう。
Private Function fStrCut(ByVal Mystring As String, ByVal nLen As Integer) As String

> 参考にしてやってみましたが・・・  
> >list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _
> >+ StrDup(15, " ") _
> >+ CType(Me.m_TestDt.Rows(i)("数量"), String))
>
> + StrDup(15, " ") _
> の部分をfStrCut(15," ") _
> にしたのですが、実行エラーが出ました。
> <エラー内容>
> ex={System.InvalidCastException}
> 文字列" " から型'Integer'へのキャストが有効ではありません
>
> どうしたらいいでしょうか?

[ツリー表示へ]
タイトルRe^4: ListBox内での表示
記事No2214
投稿日: 2005/09/21(Wed) 18:03
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> お世話になります。
>
> fStrCutの引数をよく見ましょう。
> Private Function fStrCut(ByVal Mystring As String, ByVal nLen As Integer) As String

といわれてもわかりません。
ゴメンなさ〜い、初心者なもので、詳しくお願いします。

[ツリー表示へ]
タイトルRe^4: ListBox内での表示
記事No2215
投稿日: 2005/09/21(Wed) 18:06
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> お世話になります。
>
> fStrCutの引数をよく見ましょう。
> Private Function fStrCut(ByVal Mystring As String, ByVal nLen As Integer) As String
>
もしかして
fStrCut(" ",15)
であってます?

[ツリー表示へ]
タイトルRe^5: ListBox内での表示
記事No2217
投稿日: 2005/09/21(Wed) 18:16
投稿者花ちゃん
> もしかして
> fStrCut(" ",15)
> であってます?
少しは、自分で調べるようにしましょう、使用例等も書いてあるのだから、コードを
そのまま試して見ればどういう使い方するのか理解できるはずですが。

list商品.Items.Add(fStrCut("ビビンバ",20) & "3")

むろん、fStrCut 関数 の部分はコピーしてフォーム内にペーストしておいて下さい。

[ツリー表示へ]
タイトルRe^4: ListBox内での表示
記事No2216
投稿日: 2005/09/21(Wed) 18:11
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
えーと、一応エラーは直ったのですが、表示がずれるの直ってないような・・・
private Function fStrCutの中身がいけないのですか?

[ツリー表示へ]
タイトルRe^5: ListBox内での表示
記事No2218
投稿日: 2005/09/21(Wed) 18:37
投稿者花ちゃん
> private Function fStrCutの中身がいけないのですか?

その関数の中身は私が作ってテストしていますし、問題ないはずですが。(^_^;)

[ツリー表示へ]
タイトルRe^6: ListBox内での表示
記事No2219
投稿日: 2005/09/21(Wed) 18:42
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
Private Sub txt数量_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txt数量.TextChanged

        Try
            If Me.txt商品.Text = "" Then
                MessageBox.Show("商品コードが入力されていません")
                Exit Sub
            End If

            list商品.Items.Clear()
            Me.m_ShohinCodes.Clear()
            Me.SetSyohinMaster(Me.txt商品.Text, False)
            For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1
                Me.m_ShohinCodes.Add(CType(Me.m_TestDt.Rows(i)("商品コード"), String))
                list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _
                 + fStrCut(" ", 15) _
                 + CType(Me.m_TestDt.Rows(i)("数量"), String))
            Next
            list商品.Items.Add(fStrCut(" ", 15))
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        list商品.Enabled = True
        btn修正.Enabled = True
        btn削除.Enabled = True
        btn送信.Enabled = True

        Try
            If Me.txt商品.Text = "" Then
                MessageBox.Show("商品コードが入力されていません")
                Exit Sub
            End If
            If Me.txt数量.Text = "" Then
                MessageBox.Show("数量が入力されていません")
                Exit Sub
            End If

            list商品.Items.Clear()
            Me.m_ShohinCodes.Clear()

            Me.SetSyohinMaster(Me.txt商品.Text, True)
            For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1
                Me.m_ShohinCodes.Add(CType(Me.m_TestDt.Rows(i)("商品コード"), String))

                list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _
                 + fStrCut(" ", 15) _
                 + CType(Me.m_TestDt.Rows(i)("数量"), String))
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try


        txt商品.Focus()
        txt商品.SelectAll()

        

    End Sub

fStrCut関数はそのままです
が、しかし、表示はずれます(涙)

[ツリー表示へ]
タイトルRe^6: ListBox内での表示
記事No2220
投稿日: 2005/09/21(Wed) 18:54
投稿者花ちゃん
No.2217 の回答をよく見て下さい。

fStrCut 関数を使って下記を試して見て下さい。(テスト用に新しく作って下さい)

Private Sub Button1_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) Handles Button1.Click
    With ListBox1
        .Visible = False
        .Font = New Font("MS ゴシック", 12.0)
        .Items.Add(fStrCut("ビビンバ", 16) & "3")
        .Items.Add(fStrCut("ホルモン", 16) & "4")
        .Items.Add(fStrCut("焼野菜", 16) & "4")
        .Items.Add(fStrCut("骨付きカルビ", 16) & "5")
        .Visible = True
    End With
End Sub

実行結果です。(これが最後のレスです)
hhttp://bbs4.aimix-z.com/gbbs.cgi?room=hanafusa

[ツリー表示へ]
タイトルRe^7: ListBox内での表示
記事No2221
投稿日: 2005/09/21(Wed) 20:00
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
やっと解決できました。
ListBoxのプロパティのフォントが『MSP明朝』になってました。
『MS明朝』にしたらできました。
ありがとうございました。

[ツリー表示へ]