eigenes Steuerelement für Datarepeater

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    eigenes Steuerelement für Datarepeater

    Hallo

    ich habe mir eine eigenes Steuerelement erstellt:

    VB.NET-Quellcode

    1. Public Class NumUpDown
    2. Private maxlevel As Integer = 10
    3. Private minlevel As Integer = 0
    4. Private famFont As Font
    5. Private colFont As Color
    6. Private colBtnFont As Color
    7. Private colBtn As Color
    8. Private usertest As String
    9. Public Event Text_Changed(ByVal sender As System.Object, ByVal e As System.EventArgs)
    10. Public Event ButtonUp(ByVal sender As System.Object, ByVal e As System.EventArgs)
    11. Public Event ButtonDown(ByVal sender As System.Object, ByVal e As System.EventArgs)
    12. <Description("Maxiumwert, entspicht der Obergrenze des Zählers")> _
    13. Property Maximum() As Integer
    14. Get
    15. Return maxlevel
    16. End Get
    17. Set(ByVal value As Integer)
    18. maxlevel = value
    19. Plausibilitaet()
    20. End Set
    21. End Property
    22. <Description("Miniumwert, entspicht der Untergrenze des Zählers (negative Werte sind ebenfalls möglich)")> _
    23. Property Minimum() As Integer
    24. Get
    25. Return minlevel
    26. End Get
    27. Set(ByVal value As Integer)
    28. minlevel = value
    29. Plausibilitaet()
    30. End Set
    31. End Property
    32. Property FontColor() As Color
    33. Get
    34. Return colFont
    35. End Get
    36. Set(value As Color)
    37. colFont = value
    38. lblLevel.ForeColor = colFont
    39. End Set
    40. End Property
    41. Overrides Property Font() As Font
    42. Get
    43. Return lblLevel.Font
    44. End Get
    45. Set(value As Font)
    46. famFont = value
    47. lblLevel.Font = famFont
    48. End Set
    49. End Property
    50. Property ButtonFontColor() As Color
    51. Get
    52. Return colBtnFont
    53. End Get
    54. Set(value As Color)
    55. colBtnFont = value
    56. Button1.ForeColor = colBtnFont
    57. Button2.ForeColor = colBtnFont
    58. End Set
    59. End Property
    60. Property ButtonColor() As Color
    61. Get
    62. Return colBtn
    63. End Get
    64. Set(value As Color)
    65. colBtn = value
    66. Button1.BackColor = colBtn
    67. Button2.BackColor = colBtn
    68. End Set
    69. End Property
    70. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    71. Me.lblLevel.Text += 1
    72. RaiseEvent ButtonUp(sender, e)
    73. End Sub
    74. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    75. Me.lblLevel.Text -= 1
    76. RaiseEvent ButtonDown(sender, e)
    77. End Sub
    78. Private Sub lblLevel_TextChanged(sender As System.Object, e As System.EventArgs) Handles lblLevel.TextChanged
    79. Select Case lblLevel.Text
    80. Case minlevel
    81. Button2.Enabled = False
    82. Case maxlevel
    83. Button1.Enabled = False
    84. Case Else
    85. Button1.Enabled = True
    86. Button2.Enabled = True
    87. End Select
    88. RaiseEvent Text_Changed(sender, e)
    89. End Sub
    90. Public Sub Plausibilitaet()
    91. If minlevel > maxlevel Then
    92. MsgBox("Minium darf nicht größer Maxium sein!")
    93. End If
    94. End Sub
    95. Public Overrides Property Text() As String
    96. Get
    97. Return lblLevel.Text
    98. End Get
    99. Set(value As String)
    100. usertest = value
    101. lblLevel.Text = usertest
    102. End Set
    103. End Property
    104. End Class


    Nun möchte ich das ganz in einem Datarepeater einfügen nur leider funktionieren dann meine Events nicht mehr.

    Nutze ich es aber in einer normalen Form funktioniert alles wie es soll.

    Wie müsste ich es modifizieren damit es auch im Datarepeater funktioniert?

    ronny130286 schrieb:

    VB.NET-Quellcode

    1. Plausibilitaet()
    Mach da ne Boolean-Funktion draus, und nur, wenn die True zurückgibt, werden die Werte übernommen.

    ronny130286 schrieb:

    VB.NET-Quellcode

    1. Me.lblLevel.Text += 1
    Was ist "Bockwurst" + 1 :?:
    Gib Deinem Projekt ganz schnell Option Strict On.
    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!
    Was ist "Bockwurst" + 1


    Nein das würde nicht geht => das Label ist sozusagen einfach nur eine Ausgabe für eine Zahl, im Prinzip ist mein Steuerelement nichts anderes als ein NumericUpDown nur optisch etwas anders.

    ​Mach da ne Boolean-Funktion draus, und nur, wenn die True zurückgibt, werden die Werte übernommen.


    Ja werde ich noch machen, nur an der Tatsache das das Steuerelement nicht in einem Datarepeater Objekt funktioniert ändert das leider auch nichts

    ronny130286 schrieb:

    Nein das würde nicht geht
    Hast Du leider nicht verstanden. ;(
    Du versuchst, an einen String einen numerischen Wert "DRANZURECHNEN", die VB.NET versucht mit der leider bescheidenen Standardeinstellung Option Strict Off da was zu deuten, was aber gelegentlich vor die Hose geht.
    Also
    Option Strrict On und verwalte Deine Datentypen selber.
    Dann:
    Trenne Daten und GUI.
    Rechne mit Daten, nicht mit Controls.
    Das Ergebnis einer Berechnung wird mit einem Control visualisiert.
    So.
    Stell zunächst Deinen Code um und dann sehen wir weiter.
    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!

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.ComponentModel
    3. Public Class NumUpDown
    4. Private maxlevel As Integer = 10
    5. Private minlevel As Integer = 0
    6. Private famFont As Font
    7. Private colFont As Color
    8. Private colBtnFont As Color
    9. Private colBtn As Color
    10. Private usertest As String
    11. Public Event Text_Changed(ByVal sender As System.Object, ByVal e As System.EventArgs)
    12. Public Event ButtonUp(ByVal sender As System.Object, ByVal e As System.EventArgs)
    13. Public Event ButtonDown(ByVal sender As System.Object, ByVal e As System.EventArgs)
    14. <Description("Maxiumwert, entspicht der Obergrenze des Zählers")> _
    15. Property Maximum() As Integer
    16. Get
    17. Return maxlevel
    18. End Get
    19. Set(ByVal value As Integer)
    20. maxlevel = value
    21. End Set
    22. End Property
    23. <Description("Miniumwert, entspicht der Untergrenze des Zählers (negative Werte sind ebenfalls möglich)")> _
    24. Property Minimum() As Integer
    25. Get
    26. Return minlevel
    27. End Get
    28. Set(ByVal value As Integer)
    29. minlevel = value
    30. End Set
    31. End Property
    32. Property FontColor() As Color
    33. Get
    34. Return colFont
    35. End Get
    36. Set(value As Color)
    37. colFont = value
    38. lblLevel.ForeColor = colFont
    39. End Set
    40. End Property
    41. Overrides Property Font() As Font
    42. Get
    43. Return lblLevel.Font
    44. End Get
    45. Set(value As Font)
    46. famFont = value
    47. lblLevel.Font = famFont
    48. End Set
    49. End Property
    50. Property ButtonFontColor() As Color
    51. Get
    52. Return colBtnFont
    53. End Get
    54. Set(value As Color)
    55. colBtnFont = value
    56. Button1.ForeColor = colBtnFont
    57. Button2.ForeColor = colBtnFont
    58. End Set
    59. End Property
    60. Property ButtonColor() As Color
    61. Get
    62. Return colBtn
    63. End Get
    64. Set(value As Color)
    65. colBtn = value
    66. Button1.BackColor = colBtn
    67. Button2.BackColor = colBtn
    68. End Set
    69. End Property
    70. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    71. Dim zahl As Integer = CInt(Me.lblLevel.Text)
    72. zahl = zahl + 1
    73. Me.lblLevel.Text = CStr(zahl)
    74. RaiseEvent ButtonUp(sender, e)
    75. End Sub
    76. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    77. Dim zahl As Integer = CInt(Me.lblLevel.Text)
    78. zahl = zahl - 1
    79. Me.lblLevel.Text = CStr(zahl)
    80. RaiseEvent ButtonDown(sender, e)
    81. End Sub
    82. Private Sub lblLevel_TextChanged(sender As System.Object, e As System.EventArgs) Handles lblLevel.TextChanged
    83. Dim zahl As Integer = CInt(Me.lblLevel.Text)
    84. Select Case zahl
    85. Case minlevel
    86. Button2.Enabled = False
    87. Case maxlevel
    88. Button1.Enabled = False
    89. Case Else
    90. Button1.Enabled = True
    91. Button2.Enabled = True
    92. End Select
    93. RaiseEvent Text_Changed(sender, e)
    94. End Sub
    95. Public Overrides Property Text() As String
    96. Get
    97. Return lblLevel.Text
    98. End Get
    99. Set(value As String)
    100. usertest = value
    101. lblLevel.Text = usertest
    102. End Set
    103. End Property
    104. End Class


    Die Plausibilität habe ich erst mal raus gelassen, weil im ich die eigentlich nicht benötige.

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

    Was sollemer eiglich mit dem viele Code anfangen?

    Vom Angucken finde ich höchstens innem 5-Zeiler bestenfalls die auffälligsten Fehler.
    Aber obiges kann ich ja garnet testen, nichtmal, wenn ich extra ein Testprojekt aufsetzte.

    Also ists an dir, ein Testprojekt aufzusetzen, die Sources zu zippen und anzuhängen

    Das ist die Library, das ist kein TestProjekt.
    Wie gesagt: Ich schneider mir jetzt keine Datenverarbeitung aus den Rippen, nur um dein NumUpd da auf einen DataRepeater machen zu können.
    Ein Testprojekt ist etwas, was man starten kann, und dann reproduziert es den Fehler.

    Ohne das kann man nicht debuggen.