Custom Classes - Woher kommt die Variable "Value"

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Gunngir.

    Custom Classes - Woher kommt die Variable "Value"

    Hallo, ich lese mich gerade in Vererbungen von verschiedenen Controls rein, um selbst welche zu erstellen und an meine Wünsche anzupassen.
    Jedoch gibt es hier eine Frage, anscheinend nirgends wo steht - oder ich bin einfach nur ignorant..

    Woher kommt der Wert in Value in der Zeile 28 im Quellcode ?

    Die Eigenschaft FillColor übergibt ja keine Variable beim Start.

    Danke für s Beantworten schon im Voraus :)

    VB.NET-Quellcode

    1. Public Class BetterCheckBox
    2. Inherits CheckBox
    3. Private CenterSquareColor As Color = Color.BlanchedAlmond
    4. Private CenterSquareImage As Bitmap
    5. Private CenterSquare As New Rectangle(3, 4, 10, 12)
    6. Protected Overrides Sub OnPaint _
    7. (ByVal pEvent As _
    8. System.Windows.Forms.PaintEventArgs)
    9. MyBase.OnPaint(pEvent)
    10. If Me.Checked Then
    11. If CenterSquareImage Is Nothing Then
    12. pEvent.Graphics.FillRectangle(
    13. New SolidBrush(
    14. CenterSquareColor),
    15. CenterSquare)
    16. Else
    17. pEvent.Graphics.DrawImage(
    18. CenterSquareImage,
    19. CenterSquare)
    20. End If
    21. End If
    22. End Sub
    23. Public Property FillColor() As Color
    24. Get
    25. FillColor = CenterSquareColor
    26. End Get
    27. Set(ByVal Value As Color)
    28. CenterSquareColor = Value
    29. End Set
    30. End Property
    31. Public Property FillImage() As Bitmap
    32. Get
    33. FillImage = CenterSquareImage
    34. End Get
    35. Set(ByVal Value As Bitmap)
    36. CenterSquareImage = Value
    37. End Set
    38. End Property
    39. End Class

    VB.NET-Quellcode

    1. Public Property FillColor() As Color
    2. Get
    3. FillColor = CenterSquareColor
    4. End Get
    5. Set(ByVal Value As Color)
    6. CenterSquareColor = Value
    7. End Set
    8. End Property


    Du hast hier ein Property (eine Eigenschaft der Klasse) mit dem Namen FillColor.
    Diesen Wert kannst du setzen oder auslesen.
    beim Auslesen bekommst du das was in dieser Eigenschaft gespeichert ist zurück.
    Wenn du es setzen willst - sprich verändern magst - musst du ja den Wert übergeben.

    Der wird in der Funktion Set(ByVal Value As Color) übergeben und deiner Variable zugeordnet.


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Hallo AcrOmost,

    danke für die Antwort, jedoch beantwortet sie meine Frage nicht ganz:

    ich habe hier eine neue Klasse, welche von der Klasse Checkbox abgeleitet ist.
    Jedoch wo ist die Farbe HotPink, die ja nirgends in der Grundklasse definiert ist, vorhanden?

    Dies kommt, wenn ich in der Zeile einen Haltepunkt mache und die Variable "Value" anschaue:
    Value = "{Name=HotPink, ARGB=(255, 255, 105, 180)}"

    Diese Farbe ist meines Wissens nach nirgends definiert. Oder?
    @Gunngir
    • Die Variable value wird vom Compiler generiert, wenn Du die kurze Syntax von Properties verwendest, die lange Syntax ist die von @Acr0most geschriebene.
      Intern erzeugt der Compiler noch eine Variable gleichen Namens mit führendem Unterstrich. Teste das, indem Du selbst solch eine Variable generierst: Private _FillColor As Color
    • Ggf. hast Du dieser Property im Designer diesen Wert zugewiesen.
      Wenn Du da einen Haltepunkt drauf hast, steppe einfach weiter und sieh Dir an, wo der Aufruf herkommt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    sorry, war so im Guide drin :)

    Eine weitere (wohl letzte) Frage:

    ich habe erfolgreich eine Combobox mit Text - Klasse im Datagridview (MyDatagridviewCheckBoxColumn) generiert.
    Jedoch wenn der Wert der Zelle mit einem Klick in der Form geändert wird, ändert sich der Text der CheckBoxZelle nicht.

    Woran kann das liegen?


    VB.NET-Quellcode

    1. Public Class MyDataGridViewCheckBoxCell
    2. Inherits DataGridViewCheckBoxCell
    3. Protected Overrides Sub Paint(graphics As System.Drawing.Graphics, clipBounds As System.Drawing.Rectangle, cellBounds As System.Drawing.Rectangle, rowIndex As Integer, elementState As DataGridViewElementStates, value As Object, _
    4. formattedValue As Object, errorText As String, cellStyle As DataGridViewCellStyle, advancedBorderStyle As DataGridViewAdvancedBorderStyle, paintParts As DataGridViewPaintParts)
    5. MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts)
    6. Dim contentBounds As Rectangle = Me.GetContentBounds(rowIndex)
    7. Dim stringLocation As New Point()
    8. stringLocation.Y = cellBounds.Y + 2
    9. stringLocation.X = cellBounds.X + contentBounds.Right + 2
    10. If IsDBNull(value) = True Then
    11. graphics.DrawString("NOTHING", Control.DefaultFont, System.Drawing.Brushes.Black, stringLocation)
    12. ElseIf value = True Then
    13. graphics.DrawString("TRUE", Control.DefaultFont, System.Drawing.Brushes.Black, stringLocation)
    14. Else
    15. graphics.DrawString("FALSE", Control.DefaultFont, System.Drawing.Brushes.Black, stringLocation)
    16. End If
    17. End Sub
    18. End Class
    19. Public Class MyDataGridViewCheckBoxColumn
    20. Inherits DataGridViewCheckBoxColumn
    21. Public Overrides Property CellTemplate As System.Windows.Forms.DataGridViewCell
    22. Get
    23. Return New MyDataGridViewCheckBoxCell()
    24. End Get
    25. Set(value As System.Windows.Forms.DataGridViewCell)
    26. MyBase.CellTemplate = value
    27. End Set
    28. End Property
    29. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gunngir“ ()

    Gunngir schrieb:

    Woran kann das liegen?
    Kommt er überhaupt dort vorbei?
    Ist diese Zelle tatsächlich eine MyDataGridViewCheckBoxCell?
    Setze einen Haltepunkt in den Konstruktor und das Paint und überzeuge Dich davon, dasser da vorbeikommt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany, der kommt dort vorbei, sowohl beim Starten des Projektes als auch bei einem Klicken.

    Das DataGridView zeigt auch in der Spalte der Checkbox die richtigen Text, welcher initial im DGV steht.

    Jedoch zeigt er immer noch den Ausgangswert an, wenn das DGV durch einen Klick die Zelle neu zeichnen muss.

    Die Zelle habe ich als MyDataGridViewCheckBoxCell definiert. Der Text erscheint direkt neben der Checkbox.
    @Gunngir Ganz einfach:

    VB.NET-Quellcode

    1. 'If IsDBNull(value) = True Then
    2. ' graphics.DrawString("NOTHING", Control.DefaultFont, System.Drawing.Brushes.Black, stringLocation)
    3. 'ElseIf value = True Then
    4. ' graphics.DrawString("TRUE", Control.DefaultFont, System.Drawing.Brushes.Black, stringLocation)
    5. 'Else
    6. ' graphics.DrawString("FALSE", Control.DefaultFont, System.Drawing.Brushes.Black, stringLocation)
    7. 'End If
    8. graphics.DrawString(formattedValue.ToString(), Control.DefaultFont, System.Drawing.Brushes.Black, stringLocation)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Gunngir Keine Ahnung. Ich hab mir einfach mal die Parameter und vergleichbare Snippets meiner Sammlung angesehen.
    Probiert und feddich. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!