tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル習得したデータをリストボックス内で、列を揃えて表示させるにはどうすればよいでしょうか
記事No832
投稿日: 2004/05/01(Sat) 11:44
投稿者タッチ
[OSのVer]:Windows    [VBのVer]:VB.NET
データベースからデータを習得して、リストボックス内へ、列を揃えて表示させたいのですが、項目
が四つほどあります。
1   りんご       30円   山田商店
02   みかん        50円   佐々木商店
003    パイナップル   150円   岬商店
0004  いちご       20円   山下商店
「他のコントロール関係」で、」リストボックスの表示を見たのですが、どうもうまくいきません
データの項目は no、 name、 kakaku、 stor  です。
VB4ですと、
Dim As no String
Dim As name String
no = "012345"
name = "0123456789"
などと、変数の大きさを定義して、いろいろしてたと思います。が、VB.netでは、それをしても
駄目なようです。どなたか良い案があれば、教えてください。よろしくお願い申し上げます。

[ツリー表示へ]
タイトルRe: 習得したデータをリストボックス内で、列を揃えて表示させるにはどうすればよいでしょうか
記事No833
投稿日: 2004/05/03(Mon) 15:39
投稿者花ちゃん
単に揃えて表示するだけなら、No.696 の方法でもいいのでは。

[ツリー表示へ]
タイトルRe^2: 習得したデータをリストボックス内で、列を揃えて表示させるにはどうすればよいでしょうか
記事No834
投稿日: 2004/05/03(Mon) 18:15
投稿者タッチ
[OSのVer]:Windows    [VBのVer]:VB.NET  
> 単に揃えて表示するだけなら、No.696 の方法でもいいのでは。
お返事ありがとうございます。
以前とおなじような質問で、申し訳なく思っています。
696の回答ですと、1項目、2項目は確かに揃うのですが、3項目、4項目となると
乱れてきてました。
696の回答
ListBox1.Items.Add (Microsoft.VisualBasic.Strings.Left("1" & "    ",
4) & "Enterkey")
3項目、4項目と列を揃えるには、696の、どこをどう換えればよいかわからなくて。
本当に申し訳ありません。教えてください。お願い申し上げます。

[ツリー表示へ]
タイトルRe^3: 習得したデータをリストボックス内で、列を揃えて表示させるにはどうすればよいでしょうか
記事No835
投稿日: 2004/05/03(Mon) 23:03
投稿者花ちゃん
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        With ListBox1
            .Font = New Font("MS ゴシック", 12)
            .Items.Add(Microsoft.VisualBasic.Strings.Left("1" & "        ", 7) & _
                Microsoft.VisualBasic.Strings.Left("りんご" & "      ", 7) & _
                Microsoft.VisualBasic.Strings.Right("      " & "30円" & "    ", 10) & _
                Microsoft.VisualBasic.Strings.Left("山田商店" & "      ", 7))

            .Items.Add(Microsoft.VisualBasic.Strings.Left("02" & "        ", 7) & _
                Microsoft.VisualBasic.Strings.Left("みかん" & "      ", 7) & _
                Microsoft.VisualBasic.Strings.Right("      " & "50円" & "    ", 10) & _
                Microsoft.VisualBasic.Strings.Left("佐々木商店" & "      ", 7))

            .Items.Add(Microsoft.VisualBasic.Strings.Left("003" & "        ", 7) & _
                Microsoft.VisualBasic.Strings.Left("パイナップル" & "      ", 7) & _
                Microsoft.VisualBasic.Strings.Right("      " & "150円" & "    ", 10) & _
                Microsoft.VisualBasic.Strings.Left("岬商店" & "      ", 7))
        End With
    End Sub

後はご自分で工夫してください。

[ツリー表示へ]
タイトルRe^4: 本当にありがとうございます。
記事No836
投稿日: 2004/05/04(Tue) 19:53
投稿者タッチ
[OSのVer]:Windows    [VBのVer]:VB.NET  
本当にありがとうございます。なにからなにまで、本当に申し訳ないです。

[ツリー表示へ]
タイトルRe: 習得したデータをリストボックス内で、列を揃えて表示させるにはどうすればよいでしょうか
記事No837
投稿日: 2004/05/05(Wed) 12:37
投稿者魔界の仮面弁士
> データベースからデータを習得して、リストボックス内へ、列を揃えて表示させたいのですが、項目
> が四つほどあります。

そういう時は「ListBox」ではなく、「ListView」を利用された方がよろしいかと。

Me.ListView1.View = View.Details
Me.ListView1.FullRowSelect = True
Me.ListView1.HeaderStyle = ColumnHeaderStyle.None
Me.ListView1.GridLines = False
With Me.ListView1.Columns
    .Clear()
    .Add("コード", 40, HorizontalAlignment.Left)
    .Add("商品名", 120, HorizontalAlignment.Left)
    .Add("金額", 60, HorizontalAlignment.Right)
    .Add("取引先", 100, HorizontalAlignment.Left)
End With
With Me.ListView1.Items.Add("1").SubItems
    .Add("りんご")
    .Add("30円")
    .Add("山田商店")
End With
With Me.ListView1.Items.Add("02").SubItems
    .Add("みかん")
    .Add("50円")
    .Add("佐々木商店")
End With
With Me.ListView1.Items.Add("003").SubItems
    .Add("パイナップル")
    .Add("150円")
    .Add("岬商店")
End With
With Me.ListView1.Items.Add("0004").SubItems
    .Add("いちご")
    .Add("20円")
    .Add("山下商店")
End With

[ツリー表示へ]
タイトルRe^2: 習得したデータをリストボックス内で、列を揃えて表示させるにはどうすればよいでしょうか
記事No838
投稿日: 2004/05/05(Wed) 13:17
投稿者魔界の仮面弁士
> > データベースからデータを習得して、リストボックス内へ、列を揃えて表示させたいのですが、項目
> > が四つほどあります。
> そういう時は「ListBox」ではなく、「ListView」を利用された方がよろしいかと。

どうしてもListBoxの方が良ければ、オーナードローを使うという手もあります。

DrawItemイベント内を処理する必要があるため、コーディングは若干面倒になりますが、その分、
「文字の一部だけ色やフォントを変えたい」とか、「アイコンを表示させたい」などといった
要件にも、柔軟に対応することができます。

==================================
'管理を楽にするため、独自のクラスを定義します。
Public Class MyListItem
    Public ID As String
    Public Name As String
    Public Cost As Integer
    Public Customer As String
    Public Sub New(ByVal ID As String, ByVal Name As String, _
                   ByVal Cost As Integer, ByVal Customer As String)
        Me.ID = ID
        Me.Name = Name
        Me.Cost = Cost
        Me.Customer = Customer
    End Sub
    Public Overrides Function ToString() As String
        Return String.Format("{0}, {1}, {2:#,##0}円, {3}", _
                             Me.ID, Me.Name, Me.Cost, Me.Customer)
    End Function
End Class

'ListBoxの内容を自分で描画するためのコード
Private Sub ListBox1_DrawItem(ByVal sender As Object, _
                              ByVal e As System.Windows.Forms.DrawItemEventArgs _
                             ) Handles ListBox1.DrawItem
    Const Margin As Integer = 5I

    Dim Item As MyListItem = DirectCast(Me.ListBox1.Items(e.Index), MyListItem)
    Dim myPen As New Pen(Color.Brown)
    Dim Pos As PointF
    Dim B As Brush
    If e.State = DrawItemState.Selected Then
        B = SystemBrushes.HighlightText
    Else
        B = SystemBrushes.WindowText
    End If

    e.DrawBackground()
    With e.Graphics
        Pos = New PointF(Margin, e.Bounds.Y)
        .DrawString(Item.ID, e.Font, B, Pos)
        Pos.X += 40

        .DrawString(Item.Name, e.Font, B, Pos)
        Pos.X += 120

        Pos.X += 60
        .DrawString(Item.Customer, e.Font, B, Pos)

        '右揃えにするために、描画開始位置を変更する必要があるので、
        'MeasureStringメソッドを使って文字列の「幅」を測定しています。
        Dim ItemText As String = Item.Cost.ToString("#,##0円")
        .DrawString(ItemText, e.Font, B, _
                    Pos.X - .MeasureString(ItemText, e.Font).Width, Pos.Y)
    End With
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load
    Me.ListBox1.DrawMode = DrawMode.OwnerDrawFixed
    With Me.ListBox1.Items
        .Add(New MyListItem("1", "りんご", 30, "山田商店"))
        .Add(New MyListItem("02", "みかん", 50, "佐々木商店"))
        .Add(New MyListItem("003", "パイナップル", 150, "岬商店"))
        .Add(New MyListItem("004", "いちご", 20, "山下商店"))
    End With
End Sub

[ツリー表示へ]
タイトルRe^3: 習得したデータをリストボックス内で、列を揃えて表示させるにはどうすればよいでしょうか
記事No846
投稿日: 2004/05/08(Sat) 11:01
投稿者タッチ
[OSのVer]:Windows    [VBのVer]:VB.NET  
いろいろ手があるのですね。もうびっくりすることばかりです。御礼が遅くなってすみません。
皆さんどうやって勉強してるのか不思議に思うことばかりです。少しずつ、少しずつ前に進みます。
ネバーギブアップの精神で。ありがとうございました。

[ツリー表示へ]