Input aus mehreren TextBoxen in einer TextBox

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Lightsource.

    Input aus mehreren TextBoxen in einer TextBox


    Ich habe folgende Situation.
    10 TextBoxen die erstmal relevant sind bzw. 11

    Ich habe einen fixen "Command" dieser wäre in dem Fall "$Perfection".
    je nachdem was ich in den TextBoxen ausgenommen die Name TextBox schreibe soll in der Command TextBox ausgegeben werden.
    Wenn die Slot TextBox leer ist oder die Zahl 0 hat soll "$Perfection 0 0" in der Command TextBox ausgegeben werden.
    Wenn man jedoch zusätzlich noch in die Perfection TextBox eine Zahl zwischen 0 und 100 eingibt soll die Command TextBox "$Perfection 0 0 100" ausgeben.
    Das selbe gilt für die anderen 8 TextBoxen welche ein Bild links davon haben, mit dem einzigen Unterschied das von links nach rechts die zweite Zahl im "Command" sich verändert.
    "$Perfection 0 1 100"
    "$Perfection 0 2 100"
    "$Perfection 0 3 100"
    "$Perfection 0 4 100"
    "$Perfection 0 5 100"
    "$Perfection 0 6 100"
    "$Perfection 0 7 100"
    "$Perfection 0 8 100"
    die erste Zahl dieses "Commands wird weiterhin von der Eingabe in der Slot TextBox berücksichtigt.
    Die Zahl 100 hab ich in den obigen 9 Beispielen als Eingabe "100" in der jeweiligen TextBox genommen.

    Klickt man dann die ComboBox "$edit" an soll das Label und die TextBox "NAME" sichtbar werden.
    fast alles bleibt gleich bis auf das sich der vorherige Command zu "$edit NAME $Perfection 0 0 100" verändert.
    heißt es ändert sich jediglich der Anfang des Commands und der "NAME" welcher von der NAME TextBox ausgelesen wird.
    Der Rest bleibt alles gleich bzw. der Command nach dem NAMEN.

    Ich hoffe ich habe das gut erklärt.

    Ich hatte einen Code nur dieser sieht mir nach brutalem Müll aus und bzw. aber auch die Funktion ist nicht 100% richtig.
    Ich möchte einen sauberen Code bzw. was neues dazu lernen denn das kann es nicht sein das ich das alles nur über If Abfragen lösen kann.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class SPPerfection
    2. '######################################################## SPECIALIST CARDS PERFECTION ########################################################
    3. Private Sub TextBox_SPPSlot_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPSlot.TextChanged
    4. '######################################################## SP PERFECTION ########################################################
    5. If TextBox_SPPSlot.Text = "" Or "0" Then
    6. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "0 " + TextBox_SPP.Text
    7. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "1 " + TextBox_SPPAtk.Text
    8. Else
    9. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 0 " + TextBox_SPP.Text
    10. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 1 " + TextBox_SPPAtk.Text
    11. End If
    12. '######################################################## SP PERFECTION ATK ########################################################
    13. If TextBox_SPPSlot.Text = "" Or "0" Then
    14. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "1 " + TextBox_SPPAtk.Text
    15. Else
    16. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 1 " + TextBox_SPPAtk.Text
    17. End If
    18. '######################################################## SP PERFECTION DEF ########################################################
    19. If TextBox_SPPSlot.Text = "" Or "0" Then
    20. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "2 " + TextBox_SPPDef.Text
    21. Else
    22. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 2 " + TextBox_SPPDef.Text
    23. End If
    24. '######################################################## SP PERFECTION PROP ########################################################
    25. If TextBox_SPPSlot.Text = "" Or "0" Then
    26. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "3 " + TextBox_SPPProp.Text
    27. Else
    28. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 3 " + TextBox_SPPProp.Text
    29. End If
    30. '######################################################## SP PERFECTION HP/MP ########################################################
    31. If TextBox_SPPSlot.Text = "" Or "0" Then
    32. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "4 " + TextBox_SPPHPMP.Text
    33. Else
    34. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 4 " + TextBox_SPPHPMP.Text
    35. End If
    36. '######################################################## SP PERFECTION FIRE ########################################################
    37. If TextBox_SPPSlot.Text = "" Or "0" Then
    38. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "5 " + TextBox_SPPFire.Text
    39. Else
    40. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 5 " + TextBox_SPPFire.Text
    41. End If
    42. '######################################################## SP PERFECTION WATER ########################################################
    43. If TextBox_SPPSlot.Text = "" Or "0" Then
    44. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "6 " + TextBox_SPPWater.Text
    45. Else
    46. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 6 " + TextBox_SPPWater.Text
    47. End If
    48. '######################################################## SP PERFECTION LIGHT ########################################################
    49. If TextBox_SPPSlot.Text = "" Or "0" Then
    50. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "7 " + TextBox_SPPLight.Text
    51. Else
    52. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 7 " + TextBox_SPPLight.Text
    53. End If
    54. '######################################################## SP PERFECTION SHADOW ########################################################
    55. If TextBox_SPPSlot.Text = "" Or "0" Then
    56. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "8 " + TextBox_SPPShadow.Text
    57. Else
    58. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 8 " + TextBox_SPPShadow.Text
    59. End If
    60. End Sub
    61. '######################################################## COMMAND FEATURE ########################################################
    62. '######################################################## ########################################################
    63. Private Sub TextBox_SPP_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPP.TextChanged
    64. If TextBox_SPPSlot.Text = "" Or "0" Then
    65. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "0 " + TextBox_SPP.Text
    66. Else
    67. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 0 " + TextBox_SPP.Text
    68. End If
    69. End Sub
    70. '######################################################## SP PERFECTION ATK ########################################################
    71. Private Sub TextBox_SPPAtk_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPAtk.TextChanged
    72. If TextBox_SPPSlot.Text = "" Or "0" Then
    73. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "1 " + TextBox_SPPAtk.Text
    74. Else
    75. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 1 " + TextBox_SPPAtk.Text
    76. End If
    77. End Sub
    78. '######################################################## SP PERFECTION DEF ########################################################
    79. Private Sub TextBox_SPPDef_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPDef.TextChanged
    80. If TextBox_SPPSlot.Text = "" Or "0" Then
    81. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "2 " + TextBox_SPPDef.Text
    82. Else
    83. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 2 " + TextBox_SPPDef.Text
    84. End If
    85. End Sub
    86. '######################################################## SP PERFECTION PROP ########################################################
    87. Private Sub TextBox_SPPProp_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPProp.TextChanged
    88. If TextBox_SPPSlot.Text = "" Or "0" Then
    89. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "3 " + TextBox_SPPProp.Text
    90. Else
    91. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 3 " + TextBox_SPPProp.Text
    92. End If
    93. End Sub
    94. '######################################################## SP PERFECTION HP/MP ########################################################
    95. Private Sub TextBox_SPPHPMP_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPHPMP.TextChanged
    96. If TextBox_SPPSlot.Text = "" Or "0" Then
    97. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "4 " + TextBox_SPPHPMP.Text
    98. Else
    99. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 4 " + TextBox_SPPHPMP.Text
    100. End If
    101. End Sub
    102. '######################################################## SP PERFECTION FIRE ########################################################
    103. Private Sub TextBox_SPPFire_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPFire.TextChanged
    104. If TextBox_SPPSlot.Text = "" Or "0" Then
    105. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "5 " + TextBox_SPPFire.Text
    106. Else
    107. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 5 " + TextBox_SPPFire.Text
    108. End If
    109. End Sub
    110. '######################################################## SP PERFECTION WATER ########################################################
    111. Private Sub TextBox_SPPWater_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPWater.TextChanged
    112. If TextBox_SPPSlot.Text = "" Or "0" Then
    113. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "6 " + TextBox_SPPWater.Text
    114. Else
    115. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 6 " + TextBox_SPPWater.Text
    116. End If
    117. End Sub
    118. '######################################################## SP PERFECTION LIGHT ########################################################
    119. Private Sub TextBox_SPPLight_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPLight.TextChanged
    120. If TextBox_SPPSlot.Text = "" Or "0" Then
    121. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "7 " + TextBox_SPPLight.Text
    122. Else
    123. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 7 " + TextBox_SPPLight.Text
    124. End If
    125. End Sub
    126. '######################################################## SP PERFECTION SHADOW ########################################################
    127. Private Sub TextBox_SPPShadow_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPShadow.TextChanged
    128. If TextBox_SPPSlot.Text = "" Or "0" Then
    129. TextBox_SPPCommand.Text = "$Perfection " + "0 " + "8 " + TextBox_SPPShadow.Text
    130. Else
    131. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 8 " + TextBox_SPPShadow.Text
    132. End If
    133. End Sub
    134. Private Sub TextBox_SPPCommand_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPCommand.TextChanged
    135. 'When Empty don't show Clipboard Icon
    136. If TextBox_SPPCommand.Text = "" Then
    137. GunaImageButton_ClipSPP.Visible = False
    138. End If
    139. '<<<------>>>
    140. 'Show Clipboard Icon & Hide Checkmark Icon
    141. GunaImageButton_ClipSPP.Visible = True
    142. GunaImageButton_CheckmarkSPP.Visible = False
    143. '<<<------>>>
    144. End Sub
    145. End Class


    Der Code beinhaltet erstmal nur den Command ohne $edit.
    Ich weiß der Code ist der letzte Rotz aber für mehr reichen meine Skills erstmal leider nicht aus.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class SPPerfection
    2. Private Sub TextBox_SPPSlot_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPSlot.TextChanged
    3. If TextBox_SPPSlot.Text = "" Then
    4. TextBox_SPPSlot.Text = "0"
    5. End If
    6. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " " + TextBox_SPP.Text
    7. End Sub
    8. Private Sub TextBox_SPP_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPP.TextChanged
    9. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 0 " + TextBox_SPP.Text
    10. End Sub
    11. Private Sub TextBox_SPPAtk_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPAtk.TextChanged
    12. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 1 " + TextBox_SPPAtk.Text
    13. End Sub
    14. Private Sub TextBox_SPPDef_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPDef.TextChanged
    15. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 2 " + TextBox_SPPDef.Text
    16. End Sub
    17. Private Sub TextBox_SPPProp_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPProp.TextChanged
    18. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 3 " + TextBox_SPPProp.Text
    19. End Sub
    20. Private Sub TextBox_SPPHPMP_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPHPMP.TextChanged
    21. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 4 " + TextBox_SPPHPMP.Text
    22. End Sub
    23. Private Sub TextBox_SPPFire_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPFire.TextChanged
    24. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 5 " + TextBox_SPPFire.Text
    25. End Sub
    26. Private Sub TextBox_SPPWater_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPWater.TextChanged
    27. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 6 " + TextBox_SPPWater.Text
    28. End Sub
    29. Private Sub TextBox_SPPLight_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPLight.TextChanged
    30. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 7 " + TextBox_SPPLight.Text
    31. End Sub
    32. Private Sub TextBox_SPPShadow_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPShadow.TextChanged
    33. TextBox_SPPCommand.Text = "$Perfection " + TextBox_SPPSlot.Text + " 8 " + TextBox_SPPShadow.Text
    34. End Sub
    35. Private Sub GunaCheckBox_SPPE_CheckedChanged(sender As Object, e As EventArgs) Handles GunaCheckBox_SPPE.CheckedChanged
    36. If GunaCheckBox_SPPE.Checked Then
    37. Label_SPPName.Visible = True
    38. TextBox_SPPName.Visible = True
    39. Else
    40. Label_SPPName.Visible = False
    41. TextBox_SPPName.Visible = False
    42. End If
    43. TextBox_SPPCommand.Text = "$edit " + TextBox_SPPName.Text + "$Perfection" + " " + TextBox_SPPSlot.Text
    44. End Sub
    45. End Class


    Ich weiß nicht ob dieser Code besser ist bzw. schöner aber mehr als das habe ich erstmal nicht hinbekommen.

    Ich hoffe ihr habt mein Anliegen verstanden und könnt mir helfen das sauber zu lösen.

    LG

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MrSKY“ ()

    @MrSKY Fang an mit Option Strict On :!:
    Visual Studio - Empfohlene Einstellungen
    Bevor Du das nicht umgesetzt hast, hat es keinen Zweck, Dir zu helfen.
    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!

    MrSKY schrieb:

    Nur das hilft mir auch nicht weiter.


    Es hat einen guten Grund warum dir das alle mit Nachdruck empfehlen, nur weil du keinen Grund siehst, bedeutet das nicht, das es keinen gibt. Es wird dir möglicherweise irgendwann klar werden, wenn du diese Materie besser verstehst. IMO hilft dir das imens weiter und bewart dich sogar davor irgendwann einen Fehler im Programm zu haben, wo du garnicht weisst/siehst wo der denn verbuddelt ist.
    Den Sinn hinter Option Strict On habe ich nun verstanden für was das steht bzw. für was Off steht, nur blicke ich jetzt logischerweise gar nicht mehr durch da vieles was vorher ging nun nicht mehr geht.
    Mit meinen TextBoxen bin ich auch noch nicht weiter gekommen außer der zweite Code den ich in Post #1 editiert habe.

    MrSKY schrieb:

    nur blicke ich jetzt logischerweise gar nicht mehr durch da vieles was vorher ging nun nicht mehr geht.
    Tja, das sind alles Fehler, die du verstehen lernen musst und beheben, sodass du sie in Zukunft nicht mehr machst.
    Einen nach dem anderen ins Visier nehmen und in Ordnung bringen.
    Dabei kannst du eine Menge lernen.
    Programmieren muss man lernen - sonst kann mans nicht.

    Es sind übrigens weniger, als es erstmal aussieht, weil üblicherweise wiederholen sie sich sehr häufig.
    Das ist natürlich was positives für die Zukunft nur hänge ich hier bei dem aktuellen Problem.
    Ich verstehe nicht wie ich den Aufbau anders machen kann für das was ich in Post #1 brauche.
    Mehr als meinen zweiten Code hab ich nicht hin bekommen
    Edit: Sehe gerade ich habe das falsche Bild angehängt gehabt in Post #1.
    Habe es eben editiert.
    Was ich an deinem Code nicht so mag, sind die vielen Subs für die TextChanged-Events der Textboxen. Das kann man zu einer einzigen zusammenführen. Da je nach Textbox auch ein weiterer Wert neben des Textes in den einen String kommt, kannste auch die Tag Property dazu "missbrauchen", mach ich auch gerne mal. Bedenke aber das diese Property vom Typ Object ist, kann also alles aufnehmen. Da es sich in diesem Fall um einen String handelt, reicht Object.ToString und keine weitere parserei, konvertiererei oder casterei

    Hier ein Beispiel wie man das zusammenfassen kann, das Event musst du nicht für alle textBoxen im Code abbonieren wie ich das jetzt tat. Im Designer im Eigenschaftenfenster ist ein knopf mit einem Blitz, da kannst du das alles zurechtklicksen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private tb0 As New TextBox
    4. Private tb1 As New TextBox
    5. Private tb2 As New TextBox
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. tb0.Tag = " 0 "
    8. tb1.Tag = " 1 "
    9. tb2.Tag = " 2 "
    10. tb0.Location = New Point(10, 10)
    11. tb1.Location = New Point(10, 35)
    12. tb2.Location = New Point(10, 60)
    13. Controls.AddRange({tb0, tb1, tb2})
    14. AddHandler tb0.TextChanged, AddressOf TextBoxes_TextChanged
    15. AddHandler tb1.TextChanged, AddressOf TextBoxes_TextChanged
    16. AddHandler tb2.TextChanged, AddressOf TextBoxes_TextChanged
    17. End Sub
    18. Private Sub TextBoxes_TextChanged(sender As Object, e As EventArgs)
    19. Dim tb As TextBox = DirectCast(sender, TextBox)
    20. Select Case True
    21. Case tb Is tb0
    22. Debug.WriteLine("TextBox0: " & tb.Text & ":" & tb.Tag.ToString())
    23. Case tb Is tb1
    24. Debug.WriteLine("TextBox1: " & tb.Text & ":" & tb.Tag.ToString())
    25. Case tb Is tb2
    26. Debug.WriteLine("TextBox2: " & tb.Text & ":" & tb.Tag.ToString())
    27. End Select
    28. End Sub
    29. End Class


    Aber deine Frage nach sauberen Code ist top :thumbsup: . Sauberer Code ist IMO immer Strict On konform, somit ist alles sauberer, allein weil du es angeschaltet hast(wenn dann alle Fehler behoben sind).

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Takafusa“ ()

    MrSKY schrieb:

    Das ist natürlich was positives für die Zukunft nur hänge ich hier bei dem aktuellen Problem.
    Ich würde eher sagen, das ist etwas negatives aus der Vergangenheit.

    Und viele Leuts hier sind eher unlustig, bei einem "aktuellen" Problem zu helfen, wenn offsichtlich jede Menge olle Leichen im Keller rumgammeln.
    @Takafusa ich danke dir für deine Antwort. :)
    Nur verstehe ich deinen Code überhaupt nicht, nicht das er schlecht ist oder sonst was nur ich verstehe nicht was bzw wie der Code meinen vorherigen Code der einzelnen Subs ersetzen soll.
    Das mit den Events verstehe ich nur warum nimmt man da das Load Event?
    Das im Form_Load Event zu machen ist keine Vorschrift, kannst es auch mit Button.Click Event machen oder wann und wo auch immer du wilst, klar im Form_Closing machts keinen SInn. Ein Form_Load findet i.d.R. nur einmal statt(du kannst die sub auch selbst callen), bevor der User überhaupt Eingaben machen kann, passender Zeitpunkt und Ort zum abbonieren, Form Shown wäre auch gut..

    Also du hast die textBoxen aufs Form gezogen, das habe ich manuell im Code gemacht, so dacht ich, ist das einfacher nachzuvollziehen. Dann hast du vermutlich mit einem Doppelklick auffe textBoxen das TextChamged-Event Abboniert.

    = new TextBox kommt dem greifen des Controls ausser ToolBox gleich, auf Form packen wäre Controls.Add(das neue Control), ich hab Controls.AddRange verwendet, das gleiche, nur halt für mehrere Controls gleichzeitig. Die TextChanged Event Sub hab ich einfach so geschrieben, danach noch TextChanged abboniert.

    Es kommen 2 Argumente rein, sender und e, sender ist immer das Control das dieses Event feuert, wir wissen ja ist eine TextBox, also casten wir das Object zu einer textBox und können so ganz einfach die TextBox ansprechen und die Werte hohlen.

    Es gibt unterschiedliche Arten Events zu abbonieren, dir ist sicher schon Handles Control.Event aufgefallen hinter der Event Sub, das ist auch eine Variante. Machst du einen Doppelklick aufs Control, abbonierst du das Default-Event des Controls, die Controls stehen in der DesignerDatei, schau mal rein, aber ändere da nichts, bevor du weist was du tust. Dort wird dir dann auffallen das die Controls als WithEvents deklariert sind, das ist Vorraussetzung dafür, das du die Events mit Handles Control.Event hinter der Event Sub abbonieren kannst.

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

    @Takafusa
    Leider bin ich noch so verloren das ich deinen Code noch immer nicht verstehe da es für mich noch keinen Sinn ergibt was die einzelnen Methoden genau machen.

    VB.NET-Quellcode

    1. tb0.Tag = " 0 "
    2. tb1.Tag = " 1 "
    3. tb2.Tag = " 2 "
    4. tb0.Location = New Point(10, 10)
    5. tb1.Location = New Point(10, 35)
    6. tb2.Location = New Point(10, 60)
    7. Controls.AddRange({tb0, tb1, tb2})
    8. AddHandler tb0.TextChanged, AddressOf TextBoxes_TextChanged
    9. AddHandler tb1.TextChanged, AddressOf TextBoxes_TextChanged
    10. AddHandler tb2.TextChanged, AddressOf TextBoxes_TextChanged
    11. End Sub
    12. was soll das heißen?
    13. Ich dachte "0" und "1" stellt keine Zahl dar?


    und wie kommst du zu dem?

    VB.NET-Quellcode

    1. ​Private Sub TextBoxes_TextChanged(sender As Object, e As EventArgs)
    2. Dim tb As TextBox = DirectCast(sender, TextBox)
    3. Select Case True
    4. Case tb Is tb0
    5. Debug.WriteLine("TextBox0: " & tb.Text & ":" & tb.Tag.ToString())
    6. Case tb Is tb1
    7. Debug.WriteLine("TextBox1: " & tb.Text & ":" & tb.Tag.ToString())
    8. Case tb Is tb2
    9. Debug.WriteLine("TextBox2: " & tb.Text & ":" & tb.Tag.ToString())
    10. End Select
    11. End Sub

    Ist das eine selbst erstellte Sub von dem Code darüber wo du "AddressOf TextBoxes_TextChanged" setzt?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MrSKY“ ()

    Hängt davon ab wo du sie brauchst. Bei Benutzersteuerelementen, packst du sie in die Klasse, kannst sie aber auch sozusagen ans Parent weiterleiten, eigenes Event Deklarieren, mit RaiseEvent Event kannste die dann selbst feuern, z.B. wenn ein Control Event gefeuert wird. Aber mach nicht zu viel auf einmal, sonst machstes dir selbst schwer. Erst verstehen was du machst dann weitermachen.

    Ich würde dir mal den Löffelmann empfehlen. Arbeite dich mal durch die Bücher(PDF) da drin sind die Infos die du brauchst und suchst.
    Open-sourcen der Buchbeispiele vom Löffelmann

    MrSKY schrieb:

    Ich dachte "0" und "1" stellt keine Zahl dar?


    Wenn das ein/im String ist, ist es auch keine "Zahl" in dem Sinne. Du willst einen String verketten, warum dem Tag(ist vom Typ Object, kann ja alles sein) eine Zahl zuweisen wenn du eh einem String verarbeitest? So einfach Object.ToString().
    Wenn du auch wissen willst was es mit Location und new Point auf sich hat -> Löffelman und auch selbst einfach mal mit den Werten spielen also verändern ucd schauen was passiert. Vieles davon findest du auch im EigenschaftenFenster im Designer.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Takafusa“ ()

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class SPPerfection
    3. Private tbsppslot As New TextBox
    4. Private tbspp As New TextBox
    5. Private tbsppatk As New TextBox
    6. Private Sub SPPerfection_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. tbsppslot.Tag = " 0 "
    8. tbspp.Tag = " 1 "
    9. tbsppatk.Tag = " 2 "
    10. tbsppslot.Location = New Point(287, 8)
    11. tbspp.Location = New Point(432, 8)
    12. tbsppatk.Location = New Point(32, 59)
    13. Controls.AddRange({tbsppslot, tbspp, tbsppatk})
    14. AddHandler tbsppslot.TextChanged, AddressOf TextBoxes_TextChanged
    15. AddHandler tbspp.TextChanged, AddressOf TextBoxes_TextChanged
    16. AddHandler tbsppatk.TextChanged, AddressOf TextBoxes_TextChanged
    17. End Sub
    18. Private Sub TextBoxes_TextChanged(sender As Object, e As EventArgs)
    19. Dim tb As TextBox = DirectCast(sender, TextBox)
    20. Select Case True
    21. Case tb Is tbsppslot
    22. Debug.WriteLine("TextBox0: " & tb.Text & ":" & tb.Tag.ToString())
    23. Case tb Is tbspp
    24. Debug.WriteLine("TextBox1: " & tb.Text & ":" & tb.Tag.ToString())
    25. Case tb Is tbsppatk
    26. Debug.WriteLine("TextBox2: " & tb.Text & ":" & tb.Tag.ToString())
    27. End Select
    28. End Sub
    29. End Class


    Ich habe das nun erstmal wie folgt umgesetzt nur irgendwie passiert da nichts.
    Also wenn ich das Programm starte und irgendwas in einem der 3 TextBoxen eingeben passiert nichts in der Command TextBox bzw. es passiert allgemein nichts.
    @Takafusa

    Den Code den du mir hier gegeben hast ist dieser als Basic zu betrachten oder ist das schon eher Advanced? Denn ich verstehe schon langsam den Aufbau davon jedoch nicht 100%
    Was ich aus dem Code rauslesen kann die "Sender" TextBoxen sind nun festgelegt jedoch keine "Empfänger" TextBox oder liege ich da falsch?
    Also es passiert schon was, du nimmst er nur nicht war, weil du vermutlich eines der wichtigsten Fenster im Studio beim debuggen nicht offen hast. Öffne beim debuggen das Ausgabe-Fenster. Anstatt Debug.WriteLine verarbeitest du den String, und weist diesen dann sontwas zu.
    Bilder
    • Unbenannt.jpg

      30,67 kB, 386×200, 47 mal angesehen
    Gleiches Fenster? Auch auf debuggen gestellt?. Du musst natürlich auch den Playbutton drücken, geht nur wenn die App läuft. Bei jeder Änderung eine neue Zeile, dein Code, hab ich einfach kopiert.
    Bilder
    • Unbenannt.jpg

      105,44 kB, 950×669, 41 mal angesehen

    Takafusa schrieb:

    geht nur wenn die App läuft

    Läuft doch nur bei mir steht das nicht so wie bei dir.

    Der Thread 0x8198 hat mit Code 0 (0x0) geendet.
    Der Thread 0x45b8 hat mit Code 0 (0x0) geendet.
    Das Programm "[11776] Tool.exe" wurde mit Code 4294967295 (0xffffffff) beendet.

    Takafusa schrieb:

    Also du hast die textBoxen aufs Form gezogen, das habe ich manuell im Code gemacht, so dacht ich, ist das einfacher nachzuvollziehen.

    Hää jetzt blicke ich erst recht nicht durch.
    Ich habe die TextBoxen manuell erstellt ja aber das macht ja keinen wesentlichen Unterschied ob man diese manuell oder im Code erstellt oder?

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

    Der einzige Unterschied ist, mit der Maus zurechtgeklickt geht es schneller. Im normalfall macht man das mit der Maus im Designer, gibt aber Situationen, wo man zur Laufzeit neue Controls hinzufügt.

    Weiss nicht warum keine Ausgabe stattfindet, möglicherweise was verstellt im Studio? Ersetze einfach mal das Debug.WriteLine durch MessageBox.Show.

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

    @Takafusa
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class SPPerfection
    3. Private Sub SPPerfection_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. AddHandler TextBox_SPP.TextChanged, AddressOf TextBox_TextChanged
    5. AddHandler TextBox_SPPAtk.TextChanged, AddressOf TextBox_TextChanged
    6. AddHandler TextBox_SPPDef.TextChanged, AddressOf TextBox_TextChanged
    7. AddHandler TextBox_SPPProp.TextChanged, AddressOf TextBox_TextChanged
    8. AddHandler TextBox_SPPHPMP.TextChanged, AddressOf TextBox_TextChanged
    9. AddHandler TextBox_SPPFire.TextChanged, AddressOf TextBox_TextChanged
    10. AddHandler TextBox_SPPWater.TextChanged, AddressOf TextBox_TextChanged
    11. AddHandler TextBox_SPPLight.TextChanged, AddressOf TextBox_TextChanged
    12. AddHandler TextBox_SPPShadow.TextChanged, AddressOf TextBox_TextChanged
    13. End Sub
    14. Private Sub TextBox_SPPSlot_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPSlot.TextChanged
    15. If TextBox_SPPSlot.Text = "" Then TextBox_SPPSlot.Text = "0"
    16. Dim changed As TextBox = DirectCast(sender, TextBox)
    17. TextBox_SPPCommand.Text = $"$Perfection {TextBox_SPPSlot.Text}"
    18. End Sub
    19. Private Sub TextBox_TextChanged(sender As Object, e As EventArgs)
    20. Dim changed As TextBox = DirectCast(sender, TextBox)
    21. TextBox_SPPCommand.Text = $"$Perfection {TextBox_SPPSlot.Text} {changed.Tag} {changed.Text}"
    22. End Sub
    23. Private Sub GunaImageButton_ClipSPP_Click(sender As Object, e As EventArgs) Handles GunaImageButton_ClipSPP.Click
    24. 'Clipboard Function
    25. Clipboard.SetText(TextBox_SPPCommand.Text)
    26. '<<<------>>>
    27. TextBox_SPPSlot.Clear()
    28. TextBox_SPP.Clear()
    29. TextBox_SPPAtk.Clear()
    30. TextBox_SPPDef.Clear()
    31. TextBox_SPPProp.Clear()
    32. TextBox_SPPHPMP.Clear()
    33. TextBox_SPPFire.Clear()
    34. TextBox_SPPWater.Clear()
    35. TextBox_SPPLight.Clear()
    36. TextBox_SPPShadow.Clear()
    37. TextBox_SPPCommand.Clear()
    38. End Sub
    39. Private Sub GunaImageButton_ClipSPP_MouseClick(sender As Object, e As MouseEventArgs) Handles GunaImageButton_ClipSPP.MouseClick
    40. 'A Hide Clipboard Icon & Show Checkmark Icon
    41. GunaImageButton_ClipSPP.Visible = False
    42. GunaImageButton_CheckmarkSPP.Visible = True
    43. '<<<------>>>
    44. End Sub
    45. Private Sub TextBox_SPPCommand_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPCommand.TextChanged
    46. 'When Empty don't show Clipboard Icon
    47. If TextBox_SPPCommand.Text = "" Then
    48. GunaImageButton_ClipSPP.Visible = False
    49. End If
    50. '<<<------>>>
    51. 'Show Clipboard Icon & Hide Checkmark Icon
    52. GunaImageButton_ClipSPP.Visible = True
    53. GunaImageButton_CheckmarkSPP.Visible = False
    54. '<<<------>>>
    55. End Sub
    56. Private Sub GunaCheckBox_SPPE_CheckedChanged(sender As Object, e As EventArgs) Handles GunaCheckBox_SPPE.CheckedChanged
    57. Label_SPPName.Visible = GunaCheckBox_SPPE.Checked
    58. TextBox_SPPName.Visible = GunaCheckBox_SPPE.Checked
    59. TextBox_SPPName.Clear()
    60. End Sub
    61. Private Sub TextBox_SPPName_TextChanged(sender As Object, e As EventArgs) Handles TextBox_SPPName.TextChanged
    62. Dim changed As TextBox = DirectCast(sender, TextBox)
    63. TextBox_SPPCommand.Text = $"$edit {TextBox_SPPName.Text} {TextBox_SPPSlot.Text} {changed.Tag}"
    64. End Sub
    65. End Class


    Das ist mein aktueller Code.
    Nur funktionieren 1-2 Sachen nicht ganz.

    Der Code funktioniert nicht wie es soll wenn ich die $edit CheckBox aktiviere.
    Der sonstige Command mit "$Perfection {TextBox_SPPSlot.Text} {changed.Tag} {changed.Text}" soll hinten eingefügt werden.
    Vorher kommt noch "$edit NAME". Den Namen gibt man in der SPPName TextBox ein.
    Endcommand: "$edit NAME $Perfection Slot Tag TextBox Text also folgender Code: "$Perfection {TextBox_SPPSlot.Text} {changed.Tag} {changed.Text}"
    Nur irgendwie bekomme ich das nicht hin ...
    Irgendwie vertragen sich die beiden Commands nicht ganz
    TextBox_SPPCommand.Text = $"$edit {TextBox_SPPName.Text} $Perfection {TextBox_SPPSlot.Text} {changed.Tag} {changed.Text}" geht nicht :/

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MrSKY“ ()