ProgressBar in DataGridView Zelle einfügen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    ProgressBar in DataGridView Zelle einfügen

    Hallo liebe Community,

    ich hab vor einen Downloader zu erstellen. Do nun habe ich die Auflistung der jeweiligen Links mit Hilfe des DataGridView erstellt.
    Jetzt habe ich eine Frage:
    Mit welchem Befehl, kann ich ihm denn sagen, dass er in die Zellen der Spalte XY immer ProgressBars einfügen soll und diese natürlich auch irgendwie nummeriert/benannt sein müssen, da man ihnen ja den jeweiligen Valuewert sagen muss.

    Irgendwie muss das ja möglich sein.

    MfG, lace
    omg ich kann doch nicht für jede zelle so einen riesigen einfügen. ich steig da außerdem null durch.
    gibts jemanden der etwas merh zeit hat und mir einen kurzen und knackigen code zeigen kann?
    ich will doch nur eine progressbar in jede zelle in der spalte xy und nicht adobe photoshop programmieren -.-

    EDIT:

    ich hab jetz sowas gebastelt aber es gibt mir nene error:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    3. Dim col As New ProgressColumn
    4. DataGridView1.Columns.Add(col)
    5. DataGridView1.AllowUserToAddRows = False
    6. DataGridView1.RowCount = 5
    7. Dim x As Integer = 1
    8. For Each row As DataGridViewRow In DataGridView1.Rows
    9. row.Cells(0).Value = x * 20
    10. x += 1
    11. Next
    12. End Sub
    13. End Class



    VB.NET-Quellcode

    1. Public Class ProgressColumn
    2. Inherits DataGridViewColumn
    3. Public Sub New()
    4. MyBase.New(New ProgressCell())
    5. End Sub
    6. Public Overrides Property CellTemplate() As DataGridViewCell
    7. Get
    8. Return MyBase.CellTemplate
    9. End Get
    10. Set(ByVal Value As DataGridViewCell)
    11. ' Ensure that the cell used for the template is a ProgressCell.
    12. If Value IsNot Nothing And Not TypeOf (Value) Is ProgressCell Then
    13. Throw New InvalidCastException("Must be a ProgressCell")
    14. End If
    15. MyBase.CellTemplate = Value
    16. End Set
    17. End Property
    18. End Class
    19. Public Class ProgressCell
    20. Inherits DataGridViewImageCell
    21. Protected Overrides Function GetFormattedValue(ByVal value As Object, ByVal rowIndex As Integer, ByRef cellStyle As System.Windows.Forms.DataGridViewCellStyle, ByVal valueTypeConverter As System.ComponentModel.TypeConverter, ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, ByVal context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object
    22. ' Create bitmap.
    23. Dim bmp As Bitmap = New Bitmap(Me.Size.Width, Me.Size.Height)
    24. Using g As Graphics = Graphics.FromImage(bmp)
    25. ' Percentage.
    26. Dim percentage As Double = 10
    27. Double.TryParse(Me.Value.ToString(), percentage)
    28. Dim text As String = percentage.ToString() + " %"
    29. ' Get width and height of text.
    30. Dim f As Font = New Font("Verdana", 10, FontStyle.Regular)
    31. Dim w As Integer = CType(g.MeasureString(text, f).Width, Integer)
    32. Dim h As Integer = CType(g.MeasureString(text, f).Height, Integer)
    33. ' Draw pile.
    34. g.DrawRectangle(Pens.Black, 2, 2, Me.Size.Width - 6, Me.Size.Height - 6)
    35. g.FillRectangle(Brushes.Blue, 3, 3, CInt((Me.Size.Width - 6) * percentage / 100), CInt(Me.Size.Height - 7))
    36. Dim rect As RectangleF = New RectangleF(0, 0, bmp.Width, bmp.Height)
    37. Dim sf As StringFormat = New StringFormat()
    38. sf.Alignment = StringAlignment.Center
    39. g.DrawString(text, f, Brushes.Red, rect, sf)
    40. End Using
    41. Return bmp
    42. End Function
    43. End Class


    für Zeile 31 in der unteren box hier, zeigt er mir folgenden error den ich nich kapier:

    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „lace“ ()

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    3. DataGridView1.RowCount = 6
    4. For y = 0 To 5
    5. DataGridView1(0, y).Value = y * 20
    6. Next
    7. End Sub
    8. Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
    9. If e.ColumnIndex <> 0 OrElse e.RowIndex < 0 Then Return
    10. Dim mask = DataGridViewPaintParts.All Xor DataGridViewPaintParts.ContentBackground _
    11. Or DataGridViewPaintParts.ContentForeground Or DataGridViewPaintParts.SelectionBackground
    12. e.Paint(e.CellBounds, e.PaintParts And mask)
    13. e.Handled = True
    14. Dim rct = e.CellBounds
    15. rct.Inflate(-3, -3)
    16. rct.Width = rct.Width * CInt(DataGridView1(0, e.RowIndex).Value) \ 100
    17. e.Graphics.FillRectangle(Brushes.YellowGreen, rct)
    18. End Sub
    19. End Class