Formübergreifend Buttonlabel verändern

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

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    Formübergreifend Buttonlabel verändern

    Hallo Forenmitglieder,

    meine Frau macht eine Ausbildung zur IT- Kauffrau und ich schnupper in diesem Zuge bei ein Themen etwas mit. Speziell gefällt mir das programmieren von VB. Bereits Anfang der 2000er habe ich in VBA (nur absolute Basics) gemacht.

    Derzeit bastle ich ein kleines Tower Defense mit Textbox. Allerdings kommt es derzeit zu einem Problem.

    In meinem Hauptfenster gibt es einen Button mit folgender Beschriftung:

    Aktuelle Auswahl:

    1

    Sobald man da drauf klickt, kommt man in eine andere "Form" in dem man über Buttons die Welle wechseln kann. Ich habe nun bereits über das Internet die nützlichen globalen Variablen gefunden, um Werte von der Auswahl auf meine Haupt-Form zu übertragen.

    Allerdings fehlen mir ein paar Infos. Sobald natürlich eine andere Welle in Form 2 gewählt wurde, soll sich der Button in der Hauptform ändern. Ich habe es hiermit probiert:

    Visual Basic-Quellcode

    1. Private Sub frmspiel_show(sender As Object, e As EventArgs) Handles MyBase.Load
    2. btnauswahl.Text = "Aktuelle Auswahl: " & Chr(13) & Chr(13) & pubvarmodul.welleaktuell



    Aber leider funktioniert es damit nicht. Dabei spielt es keine Rolle, ob ich die Hauptform vorher mit me.hide verstecke oder nicht.

    Hier mal der komplette Code vom Hauptform:


    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Option Strict On
    2. Public Class frmspiel
    3. Dim level As Int16 = 1
    4. Dim lebengesamt As Int32 = 100
    5. Dim lebenaktuell As Int32 = lebengesamt
    6. Dim staerke As Int32 = 10 'Stärke des Turms
    7. Dim defense As Int32 = 10 'Verteidigung des Turms
    8. Dim xpmax As Int32 = 100
    9. Dim xpaktuell As Int32 = 0
    10. Dim gegnerstaerke As Int32 = 10
    11. Dim gegnerdef As Int32 = 1
    12. Dim gegnerhp As Int32 = 10
    13. Dim angriff As Int32 = 10 'Angriffswert für Turm und Gegner
    14. Dim schaden As Int32 = 0 'Schaden, der tatsächlich verursacht wird
    15. Dim zufallszahl As New Random
    16. Private Sub wellenstart()
    17. 'Prozedur - Diese passiert, sobald man auf Start klickt!
    18. btnwellestart.Enabled = False
    19. btnauswahl.Enabled = False
    20. 'Spieler hat Welle gestartet:
    21. lbxspieletext.Items.Add("Welle 1 wurde gestartet.")
    22. lbxspieletext.SelectedIndex = lbxspieletext.Items.Count - 1
    23. Delay(1)
    24. lbxspieletext.Items.Add("Gegner greift an.")
    25. lbxspieletext.SelectedIndex = lbxspieletext.Items.Count - 1
    26. Delay(1)
    27. 'Gegner greift an:
    28. schaden = gegnerstaerke - (defense \ 2)
    29. lbxspieletext.Items.Add("Gegner verursacht " & schaden & " Schaden.")
    30. lbxspieletext.SelectedIndex = lbxspieletext.Items.Count - 1
    31. lebenaktuell = lebenaktuell - schaden
    32. pbLeben.Value = lebenaktuell
    33. Delay(1)
    34. 'Turm verteidigt sich:
    35. lbxspieletext.Items.Add("Turm verteidigt sich.")
    36. lbxspieletext.SelectedIndex = lbxspieletext.Items.Count - 1
    37. 'angriff = zufallszahl.Next(-10, 11) \ 10 -- Variante, jedoch nicht ausgereift. Benötigte Minuswerte & Kommastellen
    38. 'schaden = (staerke + angriff) - (gegnerdef \ 2)
    39. schaden = staerke - (gegnerdef \ 2)
    40. lbxspieletext.Items.Add("Du verursachst " & schaden & " Schaden.")
    41. lbxspieletext.SelectedIndex = lbxspieletext.Items.Count - 1
    42. gegnerhp = gegnerhp - schaden
    43. lbxspieletext.Items.Add("Gegner hat noch " & gegnerhp & " Leben.")
    44. lbxspieletext.SelectedIndex = lbxspieletext.Items.Count - 1
    45. If gegnerhp > 0 Then
    46. 'Sofern Gegner noch lebt passiert folgendes:
    47. End If
    48. btnauswahl.Enabled = True
    49. btnwellestart.Enabled = True
    50. End Sub
    51. Private Sub frmspiel_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    52. 'Sobald das Spiel geladen wird
    53. lbllevel.Text = level.ToString
    54. lbllebenwert.Text = lebenaktuell.ToString & "/" & lebengesamt.ToString
    55. pbLeben.Value = lebenaktuell
    56. lblangriffwert.Text = 10.ToString
    57. lbldefwert.Text = 10.ToString
    58. lblxpwert.Text = xpaktuell & "/" & xpmax
    59. pblevel.Value = xpaktuell
    60. pubvarmodul.welleaktuell = 1
    61. btnauswahl.Text = "Aktuelle Auswahl: " & Chr(13) & Chr(13) & pubvarmodul.welleaktuell
    62. End Sub
    63. Private Sub frmspiel_show(sender As Object, e As EventArgs) Handles MyBase.Load
    64. btnauswahl.Text = "Aktuelle Auswahl: " & Chr(13) & Chr(13) & pubvarmodul.welleaktuell
    65. lbxspieletext.Items.Add(pubvarmodul.welleaktuell)
    66. End Sub
    67. Private Sub btnwellestart_Click(sender As Object, e As EventArgs) Handles btnwellestart.Click
    68. 'Was passiert bei welcher Welle:
    69. Select Case pubvarmodul.welleaktuell
    70. Case 1
    71. gegnerstaerke = 10
    72. gegnerdef = 1
    73. gegnerhp = 10
    74. wellenstart()
    75. Case 2
    76. gegnerstaerke = 10
    77. gegnerdef = 2
    78. gegnerhp = 20
    79. wellenstart()
    80. Case 3
    81. gegnerstaerke = 12
    82. gegnerdef = 2
    83. gegnerhp = 30
    84. wellenstart()
    85. Case 4
    86. gegnerstaerke = 12
    87. gegnerdef = 3
    88. gegnerhp = 40
    89. wellenstart()
    90. Case 5
    91. gegnerstaerke = 15
    92. gegnerdef = 3
    93. gegnerhp = 50
    94. wellenstart()
    95. Case Else
    96. End Select
    97. End Sub
    98. Private Sub btnauswahl_Click(sender As Object, e As EventArgs) Handles btnauswahl.Click
    99. wellenauswahl.Show()
    100. Me.Hide()
    101. End Sub
    102. End Class




    Hier der komplette Text der Nebenform:

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Option Strict On
    2. Public Class wellenauswahl
    3. Private Sub wellewechseln()
    4. frmspiel.Show()
    5. Me.Hide()
    6. End Sub
    7. Private Sub btnwelle1_Click(sender As Object, e As EventArgs) Handles btnwelle1.Click
    8. pubvarmodul.welleaktuell = 1
    9. wellewechseln()
    10. End Sub
    11. Private Sub btnwelle2_Click(sender As Object, e As EventArgs) Handles btnwelle2.Click
    12. pubvarmodul.welleaktuell = 2
    13. wellewechseln()
    14. End Sub
    15. Private Sub btnwelle3_Click(sender As Object, e As EventArgs) Handles btnwelle3.Click
    16. pubvarmodul.welleaktuell = 3
    17. wellewechseln()
    18. End Sub
    19. Private Sub btnwelle4_Click(sender As Object, e As EventArgs) Handles btnwelle4.Click
    20. pubvarmodul.welleaktuell = 4
    21. wellewechseln()
    22. End Sub
    23. Private Sub btnwelle5_Click(sender As Object, e As EventArgs) Handles btnwelle5.Click
    24. pubvarmodul.welleaktuell = 5
    25. wellewechseln()
    26. End Sub
    27. End Class





    Ich hoffe, ihr könnt mir helfen.

    Vielen Dank im Voraus

    Corai



    p.s.: Bedenkt, dass ich das nie gelernt habe und zerreißt mich bitte nicht in der Luft :)

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

    @Corai Falsche Herangehensweise.
    Zunächst editierst Du Deinen Post und packst Deinen Quellcode in einen Spoiler:
    Quellcode markieren, auf Spoiler klicken.

    =====
    Zunächst lass den VB6-Mist-Sch...-Ranz-Uraltkram, arbeite mit VB.NET.
    Wie da Dialoge aufgerufen werden, gugst Du hier: Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Mach einen modalen Dialog und gib diesem ein Properety mit der gewünschten Eigenschaft, der Nummer der Welle, die Du dann im aufrufenden Dialog auswertest:

    VB.NET-Quellcode

    1. Using dlg As New wellenauswahl
    2. dlg.welleaktuell = DIE_AKTUELLE_NUMMER ' zum selektieren des aktuellen Standes
    3. If dlg.ShowDialog() <> DialogResult.OK Then
    4. Return ' Abbruch geklickt
    5. End If
    6. DIE_AKTUELLE_NUMMER = dlg.welleaktuell
    7. End Using
    8. ' mit DIE_AKTUELLE_NUMMER was tun
    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, ich komme gerade nicht mit. Und mit dem von dir aufgezeigtem Befehl ändert sich die Beschriftung des Buttons, sobald ich in der anderem Form die Welle auswähle?

    Unten ein Bild von meiner Visual Studio Version.

    Zudem Bild von der Hauptform "Form2" - rechts der Button, auf dem die aktuelle Welle stehen soll & ein Bild von der Wellenauswahl-Form.


    bilder-upload.eu/bild-d5aa80-1540630436.jpg.html
    bilder-upload.eu/bild-0d8a40-1540630478.jpg.html
    bilder-upload.eu/bild-81afdd-1540630487.jpg.html

    Kann man denn hier zudem keine Bilder hochladen? ?(

    Corai schrieb:

    Sorry, ich komme gerade nicht mit.
    Du hast da mistigen VB6-Code, den solltest Du entfernen: Visual Studio - Empfohlene Einstellungen
    Mein Code ändert kein Label, das musst Du noch implementieren:

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. ' mit DIE_AKTUELLE_NUMMER was tun
    ====
    Editiere Deinen 1. Post und pack Deinen Code in einen Spoiler.
    Bilder hochladen:
    Erweiterte Antwort = Dateianhänge => Hochladen.
    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 Leute,

    habe mal den Quellcode in einen Spoiler gepackt :)

    Bezüglich VB 6 und VB net... ich will mich nicht zu tief rein steigern. Mein Ziel ist ja lediglich, ein Miniprogramm zu erstellen.

    Wo muss denn der von dir gepostete Code hin? Da, wo der Button ist oder in die andere Form? Was macht eigentlich dein Code genau?

    Viele Grüße

    Corai

    Corai schrieb:


    Wo muss denn der von dir gepostete Code hin? Da, wo der Button ist oder in die andere Form? Was macht eigentlich dein Code genau?


    Hast du den Link den der @RodFromGermany dir hier in Post #2 gegeben hat nicht gelesen? Da steht doch drin was da passiert. Und wie man das nutzt.

    In dem einen Zug sagst du dir gefällt das Programmieren und nun sagst du du willst dich nicht so reinsteigern.
    Lerne es doch gleich richtig das hilft doch dir auch nur vor allem wenn es dir Spaß macht.
    Desweiteren hat dir RFG auch diesen Visual Studio - Empfohlene Einstellungen
    netten Link gegeben so das du ihn dir mal anschaust.

    Also müsstest du dir 2 Links mal anschauen und durch arbeiten um an dein Ziel zu kommen. Das sollte es doch Wert sein oder nicht?
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Corai schrieb:

    Bezüglich VB 6 und VB net... ich will mich nicht zu tief rein steigern.
    Wenn Du bei VB6 kleben bleiben willst, wird Dir wohl nicht geholfen werden.
    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 zusammen,

    tut mir leid Leute, dann muss ich darauf verzichten. Schade hierfür :(

    Wie gesagt durch Haushalt und Familie bleibt mir pro Woche(nende) gerade mal 1-2 Stunden, um mich damit oder mit etwas anderem zu befassen. Dann bereche ich hier mal ab oder probiere es mal mit einer Schleife, die alle 0,5 Sekunden den Button aktualisiert.

    Trotzdem vielen Dank für die Antworten.

    Viele Grüße Corai
    Hat er doch gesagt: keine Zeit, vb.net zu lernen.
    Damit hängt er in einem unlösbaren Paradoxon: Er will vb.net programmieren, ohne es zu lernen.



    my 5 ct: @TE: Tu dir einen Gefallen, und lass die Finger davon.
    Man kann leider tatsächlich vb.net programmieren, ohne es vernünftig zu lernen, aber dabei gewöhnt man sich nur haufenweise falsche Vorgehensweisen an.
    Und was man sich so einmal falsches angewöhnt hat, wird man nur sehr mühsam wieder los.
    Solche "Programmierer" sind dann ein Greuel, und meist auch unbelehrbar.
    Und jedes Stückchen Code, was man von solche Leuts zu sehen bekommt, treibt einem die Tränen in die Augen.
    Weil die können keinen String von einem Integer unterscheiden, und keinen Datentypen von einem Objekt.
    Die Kentnisse über VB6 scheinen ja auch nicht üppig zu sein, da ist die die knappe Zeit vielleicht besser verwendet, wenn gleich auf VB.Net umzustiegen wird !?