einen index für eine if anweisung anwenden geht das ? Vb2010

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von VBGameCoder.

    einen index für eine if anweisung anwenden geht das ? Vb2010

    Kann man ein Index als einen Verweis nutzen für eine if Anweisung ?
    zb ich gebe eine bestimmte spalte "Siehe Beispiel" einen Index nummer und führe sie dann mit einer Jeweiligen Tasten Belegung aus.
    In dem Fall wollte ich zu Jeder Taste eine andere Schuss Richtung mitteilen
    die das Objekt einschlagen soll zb ich gehe nach links drücke Space und er schießt nach links und so auch mit jeder anderen Anweisung
    nach rechts gehen und die taste Space schießen nach rechts usw

    VB.NET-Quellcode

    1. Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    2. Dim index As Integer
    3. If e.KeyValue = Keys.W Then
    4. index = 1
    5. Timer1.Stop()
    6. ElseIf e.KeyValue = Keys.A Then
    7. index = 2
    8. Timer4.Stop()
    9. ElseIf e.KeyValue = Keys.S Then
    10. index = 3
    11. Timer2.Stop()
    12. ElseIf e.KeyValue = Keys.D Then
    13. index = 4
    14. Timer3.Stop()
    15. ElseIf e.KeyValue = Keys.Space Then
    16. Timer5.Start()
    17. If Label3.Text = "0" Then
    18. Else
    19. If index = 1 Then
    20. Label3.Text -= 25
    21. ElseIf index = 2 Then
    22. Label3.Text -= 25
    23. ElseIf index = 3 Then
    24. Label3.Text -= 25
    25. ElseIf index = 4 Then
    26. Label3.Text -= 25
    27. End If
    28. End If
    29. End If
    30. End Sub


    Habs in beider Richtung ausprobiert in keyup und in keydown beides hat bei mir nicht geklappt daher karm mir die frage auf ob ein Index überhaupt das könnte :?

    Toteditierten Post wiederhergestellt. Verschoben. ~Thunderbolt

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

    Deinem Problembeschreibungstext kann ich zwar nicht entnehmen, was jetzt das Problem ist und wie Du Dir die Lösung vorstellst, aber 2 Dinge wären mal erkennbar:
    1. es fehlt, wie bei vielen, das obligatorische Option Strict On
    2. Du speicherst Deine auszuwertende Variable Index lokal in der KeyUp-Funktion. Das heißt, wenn Du eine der WASD-Tasten drückst, wird Index zwar geändert, Dein Programm vergisst aber den zugeordneten Wert, sobald Du Space drückst, da die Prozedur nach Drücken von WASD verlassen wurde. Daher wäre der erste (von noch vielen folgenden) Schritten: Dim index As Integer raus aus der Prozedur und (zumindest zeitweise) an den Anfang der Klassendefinition, also nach Public Class Form1
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nach dem ich Dim Index as Integer nach Oben Verlegt habe Funktioniert es nun die Option Strict on nimmt er nicht an er sagt dann das dies nicht mit Mehrzeilen verwendet kann ich hab es von oben bis unten versucht zu platzieren nirgends passt es hin ^^" aber gehört das nicht normalerweise in die Load oder in die Public class ?

    VBGameCoder schrieb:

    Option Strict on nimmt er nicht an


    Schreib Option Strict On in die erste Zeile deines Projekts. Nix in Load/Class/etc.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Dann nimmt er es zwar an aber der Code bewirkt ziemlich viele Fehler in den anderen Codes von mir :?
    zb kann dann nicht mehr Label"schlag mich tot name".Text -=10 nicht mehr verwendet werden :?

    Ich muss aber auch sagen auch one diese Option funktioniert bereits alles einwandfrei brauche ich die Option also wirklich bzw dringend ?

    Fehler der dadurch entsteht lautet "Fehler 2 "Option Strict On" lässt keine impliziten Konvertierungen von String in Integer zu. C:\Users\schlagmichtot\documents\visual studio 2010\Projects\schlagmichtot\schlagmichtot\Form1.vb 20 17 schlagmichtot

    "

    VBGameCoder schrieb:

    brauche ich die Option also wirklich bzw dringend ?
    Ja - sehr sogar! Option Strict On verlangt eine typkonforme Programmierung, damit deine App stabil und ohne Fehler richtig läuft.

    VBGameCoder schrieb:

    Dann nimmt er es zwar an aber der Code bewirkt ziemlich viele Fehler in den anderen Codes von mir :?
    Damit ist bewiesen, dass du bereits sehr viele Fehler in deinem Code eingebaut hast! Es hat nur den Anschein, dass es korrekt läuft. Der Compiler versucht zwar im Hintergrund die richtigen Datentypen zu erwischen, dass gelingt ihm aber nicht immer - und dann...

    VBGameCoder schrieb:

    gebe es einen alternativen Lösungsweg ?
    Nimm zur Zahlenwerteingabe statt ein TextBox-Control besser ein NumericUpDown-Control, da brauchst du dir dann keine Gedanken über Fehleingaben mehr machen. Stell dir vor, du gibst versehentlich in der TextBox einen nicht numerisches Zeichen ein - dann fliegt eine Exception! Da musst du dann noch vorher auf korrekte Eingaben überprüfen. Beim NUD brauchst du das nicht und es kann dir da nicht passieren...
    msdn.microsoft.com/de-de/libra…cs-lang=vb#code-snippet-3
    mit einer Textbox ist der Fehler dennoch bestehend
    er kann einfach mit dem code

    TextboxXY.text -=25

    genauso nix anfangen

    wie mit LabelXY.text -=25

    oder ich habe sie einfach falsch verstanden ^^"

    ... Jep ich hab sie falsch verstanden habe mir den link grad angesehen ^^"

    Steige leider dennoch nicht ganz durch ich verstehe das es ein alternativ code ist
    als ich in versucht habe zu nutzen wollte er eine Deklartion das tarte ich nur dennoch konnte er nichts damit anfangen :?

    Fehler 1 Der Wert vom Typ "System.Windows.Forms.NumericUpDown" kann nicht in "System.Windows.Forms.TextBox" konvertiert werden. C:\Users\XY\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 5 26 WindowsApplication1

    Fehler 2 "Value" ist kein Member von "System.Windows.Forms.TextBox". C:\Users\YX\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 11 9 WindowsApplication1

    Fehler 3 "Maximum" ist kein Member von "System.Windows.Forms.TextBox". C:\Users\xy\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 12 9 WindowsApplication1

    Ich hab dies auch mit einem Label versucht beides gescheitert

    Hab eine alternative gefunden die funktioniert

    Dim count As Integer = 0
    count += 10
    Label1.Text = count.ToString()

    nun hat sich ein weiterer fehler sich bemerkbahr gemacht wo ich wirklich null arnung habe da der code nicht von mir stammt

    Code
    Dim NeuerSchuss As New Kugel2(PictureBox3.Location.X, PictureBox3.Location.Y + (PictureBox3.Height / 2))

    Fehler 2 "Option Strict On" lässt keine impliziten Konvertierungen von Double in Integer zu. C:\Users\xy\documents\visual studio 2010\Projects\xy\yx\Form1.vb 176 75 yx



    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „VBGameCoder“ ()

    Ohje, da fehlen dir ja noch einige Grundlagen

    VBGameCoder schrieb:

    nun hat sich ein weiterer fehler sich bemerkbahr gemacht wo ich wirklich null arnung habe da der code nicht von mir stammt


    Schau dir mal das Thema Datentypen an. Ohne das gehst du relativ schnell unter.

    P.S. Die Copy&Paste Uni hat keine guten Lehrer, da lernst du das Programmieren nicht ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich hatte nur Hilfe bei einem code den ich nicht konnte copy and paste wahr das nicht er hatte es mir erklärt wie der Funktioniert =)
    nur wusste ich nicht wie ich es anders Hand haben könnte und nein die Option sind auf on Gestellt ich habe nur die Lösung gefunden xD
    keine sorge :'D

    von dem einen code will ich Ehrlich gesagt nur ungern für die Nachwelt preis geben da es ein Geschenk wahr aber wegen dem Problemm

    Labelyx.text -=25

    Dielemmer kann ich gern die Lösung preis geben die habe ich im Glücks Fall im Internet gefunden und die Erklärung dazu :3

    Hier der code für die Nachwelt falls einer das selbe Problem mit einem label hat ;)

    VB.NET-Quellcode

    1. Dim count As Integer = 100 'Die aktuelle Zahl
    2. count -= 25 ' durch was es minus oder plus genommen werden soll
    3. Label3.Text = count.ToString() ' mit welchem Label soll dies minus oder plus genommen werden LG euer VBGameCoder


    und zu dem haupt Thema wie ihr mir sagtet ich musste nur mein

    VB.NET-Quellcode

    1. Dim index As Integer
    nach oben setzten damit es funktioniert hatte =)

    VB.NET-Quellcode

    1. Dim index As Integer
    2. 'Eure Jewalige Spalte nummerieren
    3. index = '0 bis sonst wo hin ihr wollt ^^
    4. If index = '0 bis sonst wo hin Then 'könnt ihr eure Jeweilige Spalte abrufen ;)
    5. endif


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

    VBGameCoder schrieb:

    VB.NET-Quellcode

    1. Labelyx.text -=25
    Das sind ja gleich 2 Probleme.
    Option Strict On haben wir bereits behandelt.
    Das andere ist: Trenne Daten und GUI.
    Daten sind zum Rechnen und speichern da, die GUI dient der Anzeige und dem Verändern der Daten.
    Dein letztes Snippet sieht schon besser aus, allerdings wissen wir noch nicht, ob Du diesen Grundsatz verstanden hast und Deinen Code entsprechend anpasst.
    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!
    Abgesehen von den Kritiken an untypisierten Schreibweise hast Du auch ein paar logische Fehler drin.
    Eine Änderung würde ich noch in der Schreibweise vornehmen. Ersetze mal die vielen ElseIf durch Select case dann sieht man es besser.
    Ich habe den Code mal entsprechend angepaßt.

    Du definierst die Variable index innerhalb des Modules, damit startet sie bei jedem Tastendruck bei 0 und die Auswertung unten ist wirkungslos.
    Außerdem machst Du immer das gleiche, also kannst Du Dir die Prüfung auf den Index sparen.



    VB.NET-Quellcode

    1. Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    2. 'Index startet immer mit 0 da nur in diesem Modul deklariert
    3. Dim index As Integer
    4. Dim intLabel As Integer
    5. If IsNumeric(Me.Label3.Text) Then
    6. intLabel = CInt(Label3.Text)
    7. Else
    8. MessageBox.Show("Label ist nicht numerisch keine Berechnung möglich")
    9. Exit Sub
    10. End If
    11. Select Case e.KeyValue
    12. Case Keys.W
    13. index = 1
    14. Timer1.Stop()
    15. Case Keys.A
    16. index = 2
    17. Timer4.Stop()
    18. Case Keys.S
    19. index = 3
    20. Timer2.Stop()
    21. Case Keys.D
    22. index = 4
    23. Timer3.Stop()
    24. Case Keys.Space
    25. Timer5.Start()
    26. 'Auf welchem Wert steht Label zu Beginn ?
    27. If Label3.Text = "0" Then
    28. Else 'Tue dies nur wenn Leertaste gedrückt und Label.text<>0
    29. intLabel -= 25
    30. Select Case index 'Verzweigungen überflüssig eganl welchen Wert Index hat, er tut immer das gleiche
    31. Case 1
    32. intLabel -= 25
    33. Label3.Text = intLabel.ToString
    34. Case 2
    35. intLabel -= 25
    36. Label3.Text = intLabel.ToString
    37. Case 3
    38. intLabel -= 25
    39. Label3.Text = intLabel.ToString
    40. Case 4
    41. intLabel -= 25
    42. Label3.Text = intLabel.ToString
    43. End Select
    44. End If
    45. End Select
    46. End Sub
    Der Code dient zur Beispiel in dem Richtigen code sind durch aus veränderte Handlungen drinnen.
    da der Beispiel eigentlich auch mir Überflüssig schien wollte ich dies auch wieder löschen nur das wollte der "Thunderbolt" nicht.
    Mein Problem ist zu dem nicht mehr existent für mich ist der Tread geschlossen Heer Schoofi.

    da der Original Code eben nicht immer das gleiche bei mir bewirkt gibt es eine weiteren Else if Eintrag.

    der Code der hier steht ist extra ein wenig abgeändert und dient jegliche als Beispiel des Aufbaues
    und um zu beschreiben meines vorgehend weiße und wo bzw was womöglich mein Fehler sein könnte.
    Da aber der Fehler bereits gefunden wurde und somit auch umgeschrieben wurde bereits gibt es keinerlei mehr Verwendung für mich diesen Tread aufrecht zu erhalten
    Somit kann dies geschlossen werden.