Diverse Probleme, Array, Inkrement, Ausgabe, etc

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    Diverse Probleme, Array, Inkrement, Ausgabe, etc

    Hallo Leute,

    ich muss bis Samstag ein Projekt fertig bekommen. Recht ergeiziges Ziel hab ich mir dabei ausgesucht^^

    Vorweg ein paar Infos was es werden soll:

    Ich bastel ein Programm, welches einige Zahlen speichern und in einem mehrzeiligen Textfeld ausgeben soll. Diese Zahlen werden anschließend (und wirklich erst nach einiger Zeit) weiterverwendet um diverse Berechnungen durchführen zu können, welche auf Knopfdruck aktiviert werden.

    Mit den Berechnungen komme ich klar, das ausgeben in das Textfeld ist auch kein Problem. Nur das speichern in einen Array hat absolut nicht funktioniert, es hakt immer da, wo der Wert in den Array soll...

    Also habe ich es mit den Arrays wieder aufgegeben und probierte es auf "herkömmliche Weise", wo ich nun bei der Inkrementierung hängen bleibe (also beim speichern von mehr als einem Wert pro Variable).

    Folgender Aufbau soll stattfinden:

    Es gibt drei Eingabefelder, in denen nacheinander Unterschiedliche Werte eingetragen werden. Nach aktivierung des Ersten Buttons (Koordinateneingabe) folgendes Beispiel:
    Punktnummer (pnr) | Rechtswert (sngy) | Hochwert (sngx)
    Durch "Entern" soll der jeweilige Wert der entsteht, zB: pnr = 100 | sngy = 2000 | sngx = 2000 abgespeichert werden. Danach kommt die nächste Zeile, zB pnr= 101 | sngy = 2153,23 | sngx = 1823,453.

    Wenn ich so einige Punkte in meiner Koordinatendatei drin habe, möchte ich für Neue Punktnummern über Winkel (snghz) und Strecke (sngs) die Koordinaten berechnen.
    Doppelt eingetippte Punktnummern sollen automatisch erkannt werden und mir anbieten können, ob ich den alten Wert behalten möchte, den neuen oder ob es gemittelt werden soll. Dabei wird über Pythagoras eine Koordinatendifferenz angezeigt werden.

    Ich muss also gezielt von Punktnummer 100 zB den Rechtswert sowie Hochwert auslesen können wenn ich nur die Punktnummer 100 eingebe, die Koordinaten soll er sich im Hintergrund in einer neuen Variable (ye und ya sowie xe und xa zB) abspeichern.

    Für euch sicherlich einfach, für mich allerdings ziemlich schwer :wacko: als Laie.


    Punktnummern sind ganze Zahlen, Winkel mit vier Nachkommastellen, alle anderen Werte mit drei Nachkommastellen. Die Ausgabe soll stets einheitlich quasi rechtsbündig im Textfeld ausgegeben werden, Komma über Komma! Eingaben ohne Nachkomma sollen mit Nullen aufgefüllt werden, damit alles einheitlich aussieht...


    Aber hier erstmal der verbesserungswürdige Code^^ Ich hoffe ihr versteht wo mein Problem liegt und könnt mir helfen!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim strcredits As String
    3. Dim pnri, hzi, si, yi, xi, pnr, koordeini, polari, abstki, abstpi, strki, koordausi, auswahl, snghz, sngs, sngy, sngx, sngrho As Single
    4. Dim i As Long
    5. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    6. lbldatum.Text = "Heute ist der " & Date.Today
    7. btnok.Visible = False
    8. End Sub
    9. Private Sub btnende_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnende.Click
    10. Me.Close()
    11. End Sub
    12. Private Sub btncredits_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncredits.Click
    13. strcredits = MsgBox("Programmersteller: ich" & vbCrLf & "Programmtester: tester" & vbCrLf & vbCrLf & "Erstellt zwischen dem 20. und 25.06.2010", MsgBoxStyle.Information, "Credits")
    14. End Sub
    15. Private Sub btnkoordein_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnkoordein.Click
    16. auswahl = 1
    17. lblhinweis1.Text = "Punktnummer"
    18. lblhinweis2.Text = "Rechtswert"
    19. lblhinweis3.Text = "Hochwert"
    20. txtauswahl.Text = "Aktuelle Auswahl:" & vbCrLf & "Koordinateneingabe"
    21. koordeini += 1
    22. txtausgabe.Text += vbCrLf & "Koordinateneingabe Nr. " & koordeini & vbCrLf & "Pkt.-Nr. | Rechtswert | Hochwert" & vbCrLf
    23. lblhinweis1.ForeColor = Color.Red
    24. lblhinweis2.ForeColor = Color.Black
    25. lblhinweis3.ForeColor = Color.Black
    26. txtein1.Text = ""
    27. txtein2.Text = ""
    28. txtein3.Text = ""
    29. lblhinweis.Text = ""
    30. txtein1.Focus()
    31. End Sub
    32. Private Sub txtein1_KeyDown1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtein1.KeyDown
    33. If e.KeyCode = Keys.Enter Then
    34. If Me.txtein1.Text = "" Then
    35. lblhinweis.Text = "Koordinateneingabe beendet"
    36. txtausgabe.Text += "Ende der Koordinateneingabe" & vbCrLf
    37. txtauswahl.Text = ""
    38. txtein1.Text = ""
    39. txtein2.Text = ""
    40. txtein3.Text = ""
    41. lblhinweis1.ForeColor = Color.Black
    42. lblhinweis2.ForeColor = Color.Black
    43. lblhinweis3.ForeColor = Color.Black
    44. btnpolar.Focus()
    45. Else
    46. lblhinweis.Text = ""
    47. lblhinweis1.ForeColor = Color.Black
    48. lblhinweis2.ForeColor = Color.Red
    49. lblhinweis3.ForeColor = Color.Black
    50. i += 1
    51. txtein2.Focus()
    52. End If
    53. End If
    54. End Sub
    55. Private Sub txtein2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtein2.KeyDown
    56. If e.KeyCode = Keys.Enter Then
    57. lblhinweis1.ForeColor = Color.Black
    58. lblhinweis2.ForeColor = Color.Black
    59. lblhinweis3.ForeColor = Color.Red
    60. txtein3.Focus()
    61. End If
    62. End Sub
    63. Private Sub txtein3_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtein3.KeyDown
    64. If e.KeyCode = Keys.Enter Then
    65. lblhinweis1.ForeColor = Color.Black
    66. lblhinweis2.ForeColor = Color.Black
    67. lblhinweis3.ForeColor = Color.Black
    68. If Me.txtein1.Text = "" Then
    69. lblhinweis.Text = "Fehlerhafte Punkteingabe"
    70. txtein1.Focus()
    71. ElseIf Me.txtein2.Text = "" Then
    72. lblhinweis.Text = "Fehlerhafter Rechtswert"
    73. txtein2.Focus()
    74. ElseIf Me.txtein3.Text = "" Then
    75. lblhinweis.Text = "Fehlerhafter Hochwert"
    76. txtein3.Focus()
    77. Else
    78. lblhinweis.Text = "Eingabe mit Enter bestätigen"
    79. btnok.Visible = True
    80. btnok.Focus()
    81. End If
    82. End If
    83. End Sub
    84. Private Sub btnok_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnok.Click
    85. lblhinweis1.ForeColor = Color.Red
    86. lblhinweis2.ForeColor = Color.Black
    87. lblhinweis3.ForeColor = Color.Black
    88. lblhinweis.Text = "Zum beenden der Koordinateneingabe einfach Enter drücken"
    89. 'Hier werden die Werte in die Variable geschrieben, im Idealfall ist es ein Array
    90. pnri = txtein1.Text
    91. yi = txtein2.Text
    92. xi = txtein3.Text
    93. 'Er soll irgendwie die Zeichen vor einem KOMMA zählen und mit drei Nachkommestellen an eine Bestimmte, immer gleich bleibende Stelle mit gleichem Abstand zwischen den Kommas in das Textfeld platzieren
    94. txtausgabe.Text += pnri & " " & yi & " " & xi & vbCrLf
    95. txtein1.Text = ""
    96. txtein2.Text = ""
    97. txtein3.Text = ""
    98. txtein1.Focus()
    99. btnok.Visible = False
    100. End Sub
    101. Private Sub btnkoordaus_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnkoordaus.Click
    102. txtausgabe.Text += vbCrLf & "Koordinatenverzeichnis" & vbCrLf & " Pkt.-Nr. | Rechtswert | Hochwert" & vbCrLf
    103. txtauswahl.Text = "Aktuelle Auswahl:" & vbCrLf & "Koordinatenverzeichnis"
    104. 'hier soll er alle Punkte mit dazugehörigen Rechts- und Hochwert anzeigen
    105. txtausgabe.Text += pnri & " " & yi & " " & xi & vbCrLf
    106. txtauswahl.Text = ""
    107. txtein1.Text = ""
    108. txtein2.Text = ""
    109. txtein3.Text = ""
    110. lblhinweis1.ForeColor = Color.Black
    111. lblhinweis2.ForeColor = Color.Black
    112. lblhinweis3.ForeColor = Color.Black
    113. btnkoordaus.Focus()
    114. End Sub
    115. End Class
    Hi,
    1. ich würde für die Werte der Punkte eine Structur oder Klasse erstellen. Also Strctur Punkt mit X, Y, und Winkel. Die kannst du leichter handeln mit P1 as Punkt und dann P1.X... usw.
    2. Um deine Punkte zu verwalten solltest du eine List(Of Punkt) verwenden. Da du vorher ja nicht weißt, wie viele Punkte du da eingibst kannst du das Ding nahezu beliebig erweitern. Auch die Suche nach doppelten Werten ist da relativ einfach lösbar.
    Ich hoffe, ich konnte dir einen Anstoß geben.
    Zu List(Of T) siehe hier
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Irgendwie funktioniert das bei mir nicht. Wie muss ich für mein Beispiel den Code schreiben, damit es richtig gespeichert wird? Irgendwie verstehe ich das nicht um es auf mein Projekt übertragen zu können...

    Grundlegend sollen nur die drei Werte Punktnummer, Rechtswert und Hochwert gespeichert werden. Der Winkel und die Strecke werden direkt nach der Eingabe in Koordinaten berechnet, welche gespeichert werden. Der eingegebene Winkel und die Strecke werden nur einmal in die Textbox reingeschrieben und können danach wieder überschrieben werden.

    Irgendwie bekomme ich es nicht hin, dass er mir die Stellen vor dem Komma (falls vorhanden) zählt, damit er in der Ausgabe immer Komma über Komma schreiben kann...

    VB.NET-Quellcode

    1. Dim checkcoma1 = txtein1.Text.IndexOf(",")
    2. If checkcoma1 = -1 Then
    3. länge1 = txtein1.Text.Length
    4. Else
    5. 'Hier soll er die Stellen vor dem Komma zählen...
    6. länge1 = txtein1.Text.Length - 1
    7. End If


    Und die Sache mit dem SelectStart verstehe ich auch nicht so wirklich, denn damit möchte ich zB den Rechtswert immer an einer bestimmten Stelle stehen haben. Der soll die Differenz rechen zwischen der ersten Stelle und der gewünschten Anfangsposition des Rechtswertes, dann eine bestimmte Anzahl Leerstellen vor dem einzufügenden Text setzen... Das ist aber viel Tipperei oder nicht, denn ich würde es über die Abfrage machen: wenn zB 3 Stellen vor Komma, soll er 6 Leerzeichen hinzufügen, sind 4 Stellen, dann 5 etc etc... Geht das auch schneller irgendwie? Dass er automatisch das Ergebnis als Zahl (zB 6 Leerzeichen als Differenz) als Loop oder so anwendet um mir die vielen if then zu sparen?

    Leider kann ich nur anwenden was ich auch verstehe, die vielen Beispiele im Netz helfen mir irgendwie nicht, versuche sie für mich umzuschreiben aber es will irgendwie nicht ;(
    Ich habe nur 1 Ausgabefeld. Da sollen die Werte nebeneinander (und die Kommawerte untereinander) geschrieben werden. Dann ab in die nächste Zeile usw.

    Einzig wieder alles umschreiben und mehrere Textfelder als Spalten nebenander reihen könnte gehen^^ Aber dann kann ich keine Sätze reinschreiben, die auch rein sollen.
    Also muss ich es nach wie vor mit nur einem Textfeld machen...

    Oder war es auf die Eingabefelder bezogen? Ich denke es bringt nichts, da nur die Werte gespeichert werden...

    Edith:

    Die Eigenschaft TABSTOP wie in zB WORD wäre hilfreich, dann könnte ich im Ausgabefeld solche Tabstops einrichten, welche immer Rechtsbündig geschrieben werden und durch Format(xx, "##0,000") [oder so ähnlich, ist jetzt aus dem Kopf] automatisch mit Nachkommastellen versehen^^ Geht sowas?? Wäre mal eine praktische Hilfe anstelle alle Stellen kompliziert ausrechnen zu lassen 8o


    Edith 2 sagt:

    Hmm... Ist es möglich einen eingegebenen Text (Zahlen mit Komma) an einer festen Position (SelectionStart = zB 20) rechtsbündig mit Formatierung (3 Nachkomma) einfügen zu lassen?? Dann den nächsten Text an zB Position 35? Allgemein darf der Text aber nicht rechts-, sondern linksbündig sein.

    Nur habe ich das Problem, dass wenn ich Selection Start definiere, er nicht an dieser Position sondern an der exakt letzten Textstelle den neuen Text einfügt... Somit greift die Definition des Einfügepunktes nicht wirklich, in einem Text (irgendeine Hilfe oder so) habe ich gelesen, dass wenn die definierte Stelle hinter der letzten Textstelle liegt, dass er diesen dann ans Ende einfügt... Greift wohl nur wenn ich einen Text innerhalb einer Zeile einfügen möchte... Gibt es da einen Weg drumherum??

    Muss in 30 Min los zur Fachschule. Werde erst heute Abend/Nacht wiederkommen. Habe daher nur begrenzte Zeit bis ich es ansatzweise fertig bekommen kann 8| bis morgen früh.
    Hoffe ihr könnt mir etwas aus der Patsche helfen bis dahin.

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

    Endless Storm schrieb:

    Grundlegend sollen nur die drei Werte Punktnummer, Rechtswert und Hochwert gespeichert werden. Der Winkel und die Strecke werden direkt nach der Eingabe in Koordinaten berechnet, welche gespeichert werden. Der eingegebene Winkel und die Strecke werden nur einmal in die Textbox reingeschrieben und können danach wieder überschrieben werden.
    folgendes:

    VB.NET-Quellcode

    1. Public Structure Punkt
    2. Public Nr As Integer
    3. Public X As Single
    4. Public Y As Single
    5. Public Winkel As Single
    6. Public Strecke As Single
    7. End Structure
    8. Dim Punkte As List(Of Punkt)
    9. Sub Einfuegen(ByVal n As Integer, ByVal x As Single, ByVal y As Single)
    10. Dim neuerPunkt As Punkt
    11. neuerPunkt.Nr = n
    12. neuerPunkt.X = x
    13. neuerPunkt.Y = y
    14. Berechnen(neuerPunkt) 'führt die Berechnung durch
    15. Punkte.Add(neuerPunkt) 'fügt neuen Punkt in Liste ein
    16. End Sub
    17. Sub lesen()
    18. For Each P As Punkt In Punkte
    19. 'Ausgabe der gewünschten Daten an Textbox o.ä.
    20. Next
    21. End Sub
    22. Sub Berechnen(ByRef P As Punkt)
    23. 'P.Winkel=....
    24. 'P.Strecke=...
    25. End Sub
    26. End Class
    Das ist eigentlich im wesentlichen alles, was zum speichern der Punkte benötigt wird. :)
    Edit:
    zum Tab guckstduhier
    zum Ausrichten Links/Rechts gucktsduda
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

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

    Vielen Dank bis hierhin :thumbsup:

    Mit den Tabs funktioniert prima, das mit dem Rechtsbündig setzen werde ich mir näher ansehen müssen, die Beispiele kann ich gerade nicht auf meinem Projekt übertragen...

    VB.NET-Quellcode

    1. 'Berechnen(lfd) 'führt die Berechnung durch
    2. Punkte.Add(lfd) 'fügt neuen Punkt in Liste ein


    Da zunächst nur Koordinaten gespeichert werden sollen, eine Berechnung später erst kommt, lasse ich die Zeile 'Berechnen erstmal aus. Aber er markiert mir die Punkte.Add gelb... Im Code ist aber nichts unterstrichen (also nichts Falsch für VB).

    VB.NET-Quellcode

    1. If auswahl = 1 Then
    2. lfd.Nr = txtein1.Text
    3. lfd.X = txtein2.Text
    4. lfd.Y = txtein3.Text
    5. ElseIf auswahl = 2 Then
    6. lfd.Nr = txtein1.Text
    7. lfd.hz = txtein2.Text
    8. lfd.s = txtein3.Text
    9. End If
    10. 'Berechnen(lfd) 'führt die Berechnung durch
    11. Punkte.Add(lfd) 'fügt neuen Punkt in Liste ein


    Kann ich das denn so stehen lassen?? Auswahl = 1 ist die Koordinateneingabe, Auswahl = 2 soll dann für Textbox 2 und 3 eine neue Belegung machen, anstelle von Y und X dann den Winkel Hz und die Strecke S, daher die neue Belegung in der IF-Prozedur.


    Warum eigentlich haben alle meine Prozeduren Privat Sub stehen und ihr arbeitet alle mit Subs?!

    VB.NET-Quellcode

    1. 'zB
    2. Private Sub btnende_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnende.Click
    3. Me.Close()
    4. End Sub


    Hat es Vor- oder Nachteile, dass ich überall Privat Sub habe anstelle von euren Subs? Oder kann/sollte ich es versuchen irgendwie umzustellen?


    Edith sagt:

    Kann ich es von vornherein so einstellen, dass an jedem Tab rechtsbündig eingefügt wird?


    Edith 2 sagt:

    Die Fehlermeldung beim speichern ist folgende:

    Erstellen sie eine Objektinstanz mit dem Schlüsselwort "new"


    Ich poste nochmal die aktuellen Teilcodes, welche relevant sind.

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'direkt unter Form1 deklariert
    3. Dim strcredits As String
    4. Dim koordeini, polari, abstki, abstpi, strki, koordausi, auswahl, sngrho As Single
    5. Dim länge1, länge2, länge3, hinzu1, hinzu2, hinzu3, hinzu4, hinzu5 As Integer
    6. Dim i As Long
    7. Dim lfd As Punkt
    8. Dim Punkte As List(Of Punkt)
    9. 'ebenfalls unter Form1 deklariert
    10. Public Structure Punkt
    11. Public Nr As Integer
    12. Public X As Single
    13. Public Y As Single
    14. Public Hz As Single
    15. Public S As Single
    16. End Structure
    17. '... ab hier soll auf Klick die Pkt.-Nr sowie Y und X abspeichern...
    18. Private Sub btnok_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnok.Click
    19. lblhinweis1.ForeColor = Color.Red
    20. lblhinweis2.ForeColor = Color.Black
    21. lblhinweis3.ForeColor = Color.Black
    22. lblhinweis.Text = "Zum beenden der Koordinateneingabe einfach Enter drücken"
    23. txtein1.Text = Format(txtein1.Text, "0")
    24. txtein2.Text = Format(txtein2.Text, "0,000")
    25. txtein3.Text = Format(txtein3.Text, "0,000")
    26. If auswahl = 1 Then
    27. lfd.Nr = txtein1.Text
    28. lfd.X = txtein2.Text
    29. lfd.Y = txtein3.Text
    30. ElseIf auswahl = 2 Then
    31. lfd.Nr = txtein1.Text
    32. lfd.Hz = txtein2.Text
    33. lfd.S = txtein3.Text
    34. End If
    35. 'Berechnen(lfd) 'führt die Berechnung durch
    36. Punkte.Add(New Punkt) 'genau HIER markiert er Gelb mit dem oben genannten Fehler
    37. '...
    38. 'ist die Ausgabe so korrekt? Leider kann ich es nicht testen, da er ja nicht speichert^^
    39. For Each P As Punkt In Punkte
    40. rtbausgabe.Text += lfd.Nr & vbTab & lfd.Y & vbTab & lfd.X & vbCrLf
    41. Next



    Unter dem Button "Koordinatenberechnung" wird die "Anzahl = 1" gesetzt. Kann es sein, dass er, obwohl "Anzahl" unter Form deklariert wurde, damit Probleme hat? Da ich mit dem Debuggenmodus nicht klar komme, kann ich das auch irgendwie nicht auf Zwischenergebnisse überprüfen...

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

    Also ich komme irgendwie nicht hinterher...

    Nach zahlreichen änderungen schreibt er mir (ohne Nachkommastellen :thumbdown: ) die eingegebenen Werte Tab für Tab richtig in die Zeile, er meckert auch nicht mehr^^
    Aaaber:
    Er speichert nur den jeweils letzten Wert. Wenn ich anschließend über Koordinatenausgabe die eingegebenen wieder anzeigen lassen will, zeigt er die korrekte Anzahl an Zeilen, aber er füllt alle Zeilen mit den zuletzt gespeicherten Daten... Er inkrementiert nicht auf bei der Variable... Was mache ich nur falsch?

    Zudem bekomme ich es nicht gebacken, dass er mir den Text, den er frisch schreiben soll, rechtsbündig in die Tabs setzt...
    Die Formatierungen waren unter anderem Schuld daran, dass er teilweise nicht gespeichert hat... Langsam werde ich verrückt. 8o

    Manchmal liegt es einfach nur daran, dass ich eine Deklaration voanders hinschiebe, ein anderes mal ist es nur ein Wert den ich irgendwo eingeben muss wovon ich keine Kenntnis hatte.

    Ich habe wirklich Spaß am Programmieren, aber leider komme ich nicht dahinter wie manche Befehle funktionieren durch ausprobieren... Und im Internet gibt es 1001 Beispiele wo die meisten nur auf ein Miniprog funktionieren, aber nicht in einem komplexeren wie meinem...

    Vielleicht findet ihr einen Fehler den ich übersehen habe.

    Hier nocheinmal der nun letzte Stand meines Codes:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim strcredits As String
    3. Dim koordeini, polari, abstki, abstpi, strki, koordausi, auswahl, sngrho As Single
    4. Dim i As Long
    5. Dim lfd As Punkt
    6. Dim Punkte As New List(Of Punkt)
    7. Public Structure Punkt
    8. Public Nr As Integer
    9. Public X As Single
    10. Public Y As Single
    11. Public Hz As Single
    12. Public S As Single
    13. End Structure
    14. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    15. lbldatum.Text = "Heute ist der " & Date.Today
    16. btnok.Visible = False
    17. End Sub
    18. Private Sub btnende_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnende.Click
    19. Me.Close()
    20. End Sub
    21. Private Sub btncredits_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncredits.Click
    22. strcredits = MsgBox("Programmersteller: icke" & vbCrLf & "Programmtester: er & vbCrLf & vbCrLf & "Erstellt zwischen dem 20. und 25.06.2010", MsgBoxStyle.Information, "Credits")
    23. End Sub
    24. Private Sub btnkoordein_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnkoordein.Click
    25. auswahl = 1
    26. lblhinweis1.Text = "Punktnummer"
    27. lblhinweis2.Text = "Rechtswert"
    28. lblhinweis3.Text = "Hochwert"
    29. txtauswahl.Text = "Aktuelle Auswahl:" & vbCrLf & "Koordinateneingabe"
    30. koordeini += 1
    31. rtbausgabe.Text += vbCrLf & "Koordinateneingabe Nr. " & koordeini & vbCrLf & "Pkt.-Nr." & vbTab & "Rechtswert" & vbTab & "Hochwert" & vbCrLf
    32. lblhinweis1.ForeColor = Color.Red
    33. lblhinweis2.ForeColor = Color.Black
    34. lblhinweis3.ForeColor = Color.Black
    35. txtein1.Text = ""
    36. txtein2.Text = ""
    37. txtein3.Text = ""
    38. lblhinweis.Text = ""
    39. txtein1.Focus()
    40. txtein1.MaxLength = 5
    41. txtein2.MaxLength = 11
    42. txtein3.MaxLength = 11
    43. End Sub
    44. Private Sub txtein1_KeyDown1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtein1.KeyDown
    45. If e.KeyCode = Keys.Enter Then
    46. If Me.txtein1.Text = "" Then
    47. lblhinweis.Text = "Koordinateneingabe beendet"
    48. rtbausgabe.Text += "Ende der Koordinateneingabe" & vbCrLf
    49. txtauswahl.Text = ""
    50. txtein1.Text = ""
    51. txtein2.Text = ""
    52. txtein3.Text = ""
    53. lblhinweis1.ForeColor = Color.Black
    54. lblhinweis2.ForeColor = Color.Black
    55. lblhinweis3.ForeColor = Color.Black
    56. btnpolar.Focus()
    57. Else
    58. lblhinweis.Text = ""
    59. lblhinweis1.ForeColor = Color.Black
    60. lblhinweis2.ForeColor = Color.Red
    61. lblhinweis3.ForeColor = Color.Black
    62. i += 1
    63. txtein2.Focus()
    64. End If
    65. End If
    66. End Sub
    67. Private Sub txtein2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtein2.KeyDown
    68. If e.KeyCode = Keys.Enter Then
    69. lblhinweis1.ForeColor = Color.Black
    70. lblhinweis2.ForeColor = Color.Black
    71. lblhinweis3.ForeColor = Color.Red
    72. txtein3.Focus()
    73. End If
    74. End Sub
    75. Private Sub txtein3_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtein3.KeyDown
    76. If e.KeyCode = Keys.Enter Then
    77. lblhinweis1.ForeColor = Color.Black
    78. lblhinweis2.ForeColor = Color.Black
    79. lblhinweis3.ForeColor = Color.Black
    80. If Me.txtein1.Text = "" Then
    81. lblhinweis.Text = "Fehlerhafte Punkteingabe"
    82. txtein1.Focus()
    83. ElseIf Me.txtein2.Text = "" Then
    84. lblhinweis.Text = "Fehlerhafter Rechtswert"
    85. txtein2.Focus()
    86. ElseIf Me.txtein3.Text = "" Then
    87. lblhinweis.Text = "Fehlerhafter Hochwert"
    88. txtein3.Focus()
    89. Else
    90. lblhinweis.Text = "Eingabe mit Enter bestätigen"
    91. btnok.Visible = True
    92. btnok.Focus()
    93. End If
    94. End If
    95. End Sub
    96. Private Sub btnok_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnok.Click
    97. lblhinweis1.ForeColor = Color.Red
    98. lblhinweis2.ForeColor = Color.Black
    99. lblhinweis3.ForeColor = Color.Black
    100. lblhinweis.Text = "Zum beenden der Koordinateneingabe einfach Enter drücken"
    101. If auswahl = 1 Then
    102. lfd.Nr = txtein1.Text
    103. lfd.X = txtein2.Text
    104. lfd.Y = txtein3.Text
    105. ElseIf auswahl = 2 Then
    106. lfd.Nr = txtein1.Text
    107. lfd.Hz = txtein2.Text
    108. lfd.S = txtein3.Text
    109. End If
    110. Punkte.Add(New Punkt) 'Es wird nicht inkrementiert?
    111. rtbausgabe.SelectionTabs = New Integer() {50, 150, 250, 350, 450}
    112. rtbausgabe.SelectionAlignment = HorizontalAlignment.Right 'Befehl funktioniert nicht
    113. rtbausgabe.Text += vbTab & lfd.Nr & vbTab & lfd.Y & vbTab & vbTab & lfd.X & vbCrLf
    114. txtein1.Text = ""
    115. txtein2.Text = ""
    116. txtein3.Text = ""
    117. txtein1.Focus()
    118. btnok.Visible = False
    119. End Sub
    120. Private Sub btnkoordaus_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnkoordaus.Click
    121. rtbausgabe.Text += vbCrLf & "Koordinatenverzeichnis" & vbCrLf & "Pkt.-Nr." & vbTab & "Rechtswert" & vbTab & "Hochwert" & vbCrLf
    122. txtauswahl.Text = "Aktuelle Auswahl:" & vbCrLf & "Koordinatenverzeichnis"
    123. For Each P As Punkt In Punkte 'er erstellt brav die richtige Anzahl an Zeilen, aber füllt alle mit den letzten Werten auf
    124. rtbausgabe.Text += vbTab & lfd.Nr & vbTab & lfd.Y & vbTab & vbTab & lfd.X & vbCrLf
    125. Next
    126. txtauswahl.Text = ""
    127. txtein1.Text = ""
    128. txtein2.Text = ""
    129. txtein3.Text = ""
    130. lblhinweis1.ForeColor = Color.Black
    131. lblhinweis2.ForeColor = Color.Black
    132. lblhinweis3.ForeColor = Color.Black
    133. btnkoordaus.Focus()
    134. End Sub
    135. End Class

    VB.NET-Quellcode

    1. For Each P As Punkt In Punkte 'er erstellt brav die richtige Anzahl an Zeilen, aber füllt alle mit den letzten Werten auf
    2. rtbausgabe.Text += vbTab & lfd.Nr & vbTab & lfd.Y & vbTab & vbTab & lfd.X & vbCrLf Next
    Muß er ja. :)
    lfd ist ja der zuletzt eingegebene Punkt. In deiner ForEach-Schleife werden die Elemente der Liste an P übergeben 8o
    Also mußt du auch P an deinen Text übergeben.

    VB.NET-Quellcode

    1. rtbausgabe.Text += vbTab & P.Nr 'usw...
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: