Guten Tag liebe Programmier-Gemeinde
Ich arbeite zurzeit an meinem "Creataster" Programm, dass die Schnittstellen der IK220 ausliest und durch die mitgelieferte .dll von Heidenhain (DE) die Signale interpretiert.
Nun habe ich jedoch ein Problem festgestellt, dass ich nicht zu lösen vermag. Es kann auch sein dass ich schon zu lange auf den Code starre und eigentlich eine Pause einlegen sollte...^^
Einerlei.
Das Hauptformular des Creatasters:
Soll-Vorgang: Der Anwender klickt auf die Schaltfläche "Nullpunkt löschen" um, den zurzeit angewählten Nullpunkt bzw Offsetwert, in der Combobox, zu löschen.
Da es nicht reicht einfach einen Eintrag in der Combobox zu löschen, sondern auch mehrere, mit dem Bezeichner zusammenhängende, Werte auch gelöscht werden müssen, habe ich
eine List(Of string) Variable Deklariert und Methoden eingebaut, die eine Textdatei auslesen und die Werte in die List(Of string) einlesen.
Die "Speicherungslogik" sieht wie folgt aus:
Was wirklich passiert:
Sollte ich einen Nullpunkt löschen wollen, so passiert nicht das, was ich in der Methode, meiner Meinung nach, programmiert habe.
Handelt es sich bei dem angewählten Element um das erste, in der Combobox vorkommende, so löscht er zwar den Eintrag, schreibt aber eigenartiges rein:
Lösche ich aber eines der Elemente und nicht das als erstes vorkommende, erscheint folgende Fehlermeldung:
Wenn ich die Fehlermeldung richtig interpretiere, so hat es ein Problem mit dem Index, denn ich zu löschen aufgetragen habe.
So sieht der Code aus für das Löschen:
Die aufgerufene Methode sieht wie folgt aus:
Ich hoffe ich konnte meinen Fall, halbwegs verständlich erläutern.
Sollten dennoch Unklarheiten auftauchen, könnt ihr gerne Fragen.
Gruss Hutti
Ich arbeite zurzeit an meinem "Creataster" Programm, dass die Schnittstellen der IK220 ausliest und durch die mitgelieferte .dll von Heidenhain (DE) die Signale interpretiert.
Nun habe ich jedoch ein Problem festgestellt, dass ich nicht zu lösen vermag. Es kann auch sein dass ich schon zu lange auf den Code starre und eigentlich eine Pause einlegen sollte...^^
Einerlei.
Das Hauptformular des Creatasters:
Soll-Vorgang: Der Anwender klickt auf die Schaltfläche "Nullpunkt löschen" um, den zurzeit angewählten Nullpunkt bzw Offsetwert, in der Combobox, zu löschen.
Da es nicht reicht einfach einen Eintrag in der Combobox zu löschen, sondern auch mehrere, mit dem Bezeichner zusammenhängende, Werte auch gelöscht werden müssen, habe ich
eine List(Of string) Variable Deklariert und Methoden eingebaut, die eine Textdatei auslesen und die Werte in die List(Of string) einlesen.
Die "Speicherungslogik" sieht wie folgt aus:
VB.NET-Quellcode
- '____________________________________________________________________________________________________________'
- '| |'
- '| Nullpunkte und Offset Speicherungslogik |'
- '| |'
- '| Die Nullpunkte und die Offsetwerte werden in der selben Datei gespeichert und bei Anwendung in der |'
- '| gleichen List(Of String) geladen und weiter verarbeitet. |'
- '| Um zu gewährleisten dass der richtige Wert, aus der Datei, zur richtigen Zeit und Stelle geladen wird, |'
- '| sind die Werte nach einer Logik eingereiht, gespeichert: |'
- '| |'
- '| INDEX WERT ANZAHL |'
- '| |'
- '| 0 Nullpunktbezeichner 1 |'
- '| 1 Wert für X-Offset 2 |'
- '| 2 Wert für Y-Offset 3 |'
- '| 3 Wert für Z-Offset 4 |'
- '| 4 Wert für Messwert 5 |'
- '| |'
- '|__________________________________________________________________________________________________________|'
Was wirklich passiert:
Sollte ich einen Nullpunkt löschen wollen, so passiert nicht das, was ich in der Methode, meiner Meinung nach, programmiert habe.
Handelt es sich bei dem angewählten Element um das erste, in der Combobox vorkommende, so löscht er zwar den Eintrag, schreibt aber eigenartiges rein:
Lösche ich aber eines der Elemente und nicht das als erstes vorkommende, erscheint folgende Fehlermeldung:
Wenn ich die Fehlermeldung richtig interpretiere, so hat es ein Problem mit dem Index, denn ich zu löschen aufgetragen habe.
So sieht der Code aus für das Löschen:
VB.NET-Quellcode
- Private Sub LöschenEinesNullpunktes() Handles LöschenNP.Click 'Methode für das löschen eines vorhandenen Nullpunktes
- If Schreibschutz.Contains(Nullpunkt.Items.Item(NPAuswahl)) And AlsAdminAktiv = False Then 'Insofern der Nullpunkt schreibgeschützt ist, wird dieser nicht gelöscht
- MsgBox("Der angewählte Nullpunkt, ist schreibgeschützt und kann nicht gelöscht werden!") 'Es sei denn: Der Anwender ist zu dem Zeitpunkt als Admin angemeldet
- Else
- Try
- OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den Bezeichner des NP
- OffsetWerte.RemoveAt(NPAuswahl + 1) 'Löscht den X-Offset des NP
- OffsetWerte.RemoveAt(NPAuswahl + 2) 'Löscht den Y-Offset des NP
- OffsetWerte.RemoveAt(NPAuswahl + 3) 'Löscht den Z-Offset des NP
- OffsetWerte.RemoveAt(NPAuswahl + 4) 'Löscht den Z-Wert für die Messung
- OffsetExport()
- Catch ex As Exception 'Auch hier: Sollte der Versuch nicht erfolgen, wird auf das Scheitern, durch einer MSGBOX, hingewiesen.
- MsgBox("Der zu löschende Nullpunkt, befindet sich nicht im Speicher!", MsgBoxStyle.ApplicationModal, Nothing)
- End Try
- End If
- End Sub
Die aufgerufene Methode sieht wie folgt aus:
VB.NET-Quellcode
- Public Sub OffsetExport() 'Methode für das exportieren der Offsetwerte
- Try
- File.WriteAllText(OffsetPfad, String.Empty) 'Leert den Inhalt der Datei
- OffsetDateiSchreiben = New StreamWriter(OffsetPfad) 'Liest den Pfad zur Datei, für die Offset-Werte, ein
- Nullpunkt.Items.Clear() 'Leert die Combobox "Nullpunkte"
- For j = 0 To OffsetWerte.Count - 1 Step 1 'Für jedes Element in der List(Of String) "OffsetWerte" einen Durchgang ausführen
- OffsetDateiSchreiben.WriteLine(OffsetWerte(j)) 'Bei jedem Durchgang wird das aktuelle Element in die Datei geschrieben
- Next
- For i = 0 To OffsetWerte.Count - 5 Step 5 'Gleiche List(Of String) nur wird diesmal jedes 5 Element ausgelesen
- Nullpunkt.Items.Add(OffsetWerte(i)) 'Das ausgelesene Element, welches den "Bezeichner" des Offsets entpsricht
- ' Wird in die Combobox "Nullpunkte" gespeichert
- Next
- OffsetDateiSchreiben.Close() 'Schliesst den Zugriff zur Datei wieder
- Catch Fehlermeldung As Exception 'Insofern der Versuch nicht erfolgt, wird auf das Scheitern, durch eine MSGBOX, hingewiesen.
- MsgBox("Es konnte nicht in die .txt Dateien geschrieben werden, vielleicht besteht ein Rechte Problem.", MsgBoxStyle.Critical, "Export Fehlgeschlagen")
- End Try
- End Sub
Ich hoffe ich konnte meinen Fall, halbwegs verständlich erläutern.
Sollten dennoch Unklarheiten auftauchen, könnt ihr gerne Fragen.
Gruss Hutti