Löschen von Elementen mittels Indexierung

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

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Hutti.

    Löschen von Elementen mittels Indexierung

    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:

    VB.NET-Quellcode

    1. '____________________________________________________________________________________________________________'
    2. '| |'
    3. '| Nullpunkte und Offset Speicherungslogik |'
    4. '| |'
    5. '| Die Nullpunkte und die Offsetwerte werden in der selben Datei gespeichert und bei Anwendung in der |'
    6. '| gleichen List(Of String) geladen und weiter verarbeitet. |'
    7. '| Um zu gewährleisten dass der richtige Wert, aus der Datei, zur richtigen Zeit und Stelle geladen wird, |'
    8. '| sind die Werte nach einer Logik eingereiht, gespeichert: |'
    9. '| |'
    10. '| INDEX WERT ANZAHL |'
    11. '| |'
    12. '| 0 Nullpunktbezeichner 1 |'
    13. '| 1 Wert für X-Offset 2 |'
    14. '| 2 Wert für Y-Offset 3 |'
    15. '| 3 Wert für Z-Offset 4 |'
    16. '| 4 Wert für Messwert 5 |'
    17. '| |'
    18. '|__________________________________________________________________________________________________________|'


    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

    1. Private Sub LöschenEinesNullpunktes() Handles LöschenNP.Click 'Methode für das löschen eines vorhandenen Nullpunktes
    2. If Schreibschutz.Contains(Nullpunkt.Items.Item(NPAuswahl)) And AlsAdminAktiv = False Then 'Insofern der Nullpunkt schreibgeschützt ist, wird dieser nicht gelöscht
    3. 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
    4. Else
    5. Try
    6. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den Bezeichner des NP
    7. OffsetWerte.RemoveAt(NPAuswahl + 1) 'Löscht den X-Offset des NP
    8. OffsetWerte.RemoveAt(NPAuswahl + 2) 'Löscht den Y-Offset des NP
    9. OffsetWerte.RemoveAt(NPAuswahl + 3) 'Löscht den Z-Offset des NP
    10. OffsetWerte.RemoveAt(NPAuswahl + 4) 'Löscht den Z-Wert für die Messung
    11. OffsetExport()
    12. Catch ex As Exception 'Auch hier: Sollte der Versuch nicht erfolgen, wird auf das Scheitern, durch einer MSGBOX, hingewiesen.
    13. MsgBox("Der zu löschende Nullpunkt, befindet sich nicht im Speicher!", MsgBoxStyle.ApplicationModal, Nothing)
    14. End Try
    15. End If
    16. End Sub



    Die aufgerufene Methode sieht wie folgt aus:

    VB.NET-Quellcode

    1. Public Sub OffsetExport() 'Methode für das exportieren der Offsetwerte
    2. Try
    3. File.WriteAllText(OffsetPfad, String.Empty) 'Leert den Inhalt der Datei
    4. OffsetDateiSchreiben = New StreamWriter(OffsetPfad) 'Liest den Pfad zur Datei, für die Offset-Werte, ein
    5. Nullpunkt.Items.Clear() 'Leert die Combobox "Nullpunkte"
    6. For j = 0 To OffsetWerte.Count - 1 Step 1 'Für jedes Element in der List(Of String) "OffsetWerte" einen Durchgang ausführen
    7. OffsetDateiSchreiben.WriteLine(OffsetWerte(j)) 'Bei jedem Durchgang wird das aktuelle Element in die Datei geschrieben
    8. Next
    9. For i = 0 To OffsetWerte.Count - 5 Step 5 'Gleiche List(Of String) nur wird diesmal jedes 5 Element ausgelesen
    10. Nullpunkt.Items.Add(OffsetWerte(i)) 'Das ausgelesene Element, welches den "Bezeichner" des Offsets entpsricht
    11. ' Wird in die Combobox "Nullpunkte" gespeichert
    12. Next
    13. OffsetDateiSchreiben.Close() 'Schliesst den Zugriff zur Datei wieder
    14. Catch Fehlermeldung As Exception 'Insofern der Versuch nicht erfolgt, wird auf das Scheitern, durch eine MSGBOX, hingewiesen.
    15. MsgBox("Es konnte nicht in die .txt Dateien geschrieben werden, vielleicht besteht ein Rechte Problem.", MsgBoxStyle.Critical, "Export Fehlgeschlagen")
    16. End Try
    17. End Sub



    Ich hoffe ich konnte meinen Fall, halbwegs verständlich erläutern.
    Sollten dennoch Unklarheiten auftauchen, könnt ihr gerne Fragen.

    Gruss Hutti

    Hutti schrieb:

    VB.NET-Quellcode

    1. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den Bezeichner des NP
    2. OffsetWerte.RemoveAt(NPAuswahl + 1) 'Löscht den X-Offset des NP
    3. OffsetWerte.RemoveAt(NPAuswahl + 2) 'Löscht den Y-Offset des NP
    4. OffsetWerte.RemoveAt(NPAuswahl + 3) 'Löscht den Z-Offset des NP
    5. OffsetWerte.RemoveAt(NPAuswahl + 4) 'Löscht den Z-Wert für die Messung
    machst Du

    VB.NET-Quellcode

    1. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den Bezeichner des NP
    2. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den X-Offset des NP
    3. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den Y-Offset des NP
    4. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den Z-Offset des NP
    5. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht den Z-Wert für die Messung
    denn das Löschen eines Items lässt die folgenden einen Index runter rutschen.
    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!
    Es hat geholfen!

    Sieht nun so aus:

    VB.NET-Quellcode

    1. Private Sub LöschenEinesNullpunktes() Handles LöschenNP.Click 'Methode für das löschen eines vorhandenen Nullpunktes
    2. If Schreibschutz.Contains(Nullpunkt.Items.Item(NPAuswahl)) And AlsAdminAktiv = False Then 'Insofern der Nullpunkt schreibgeschützt ist, wird dieser nicht gelöscht
    3. 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
    4. Else
    5. Try
    6. For i = 1 To 5 Step 1
    7. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht: Bezeichner / X-Off / Y-Off / Z-Off / Z-Messkorrektur
    8. Next
    9. OffsetExport()
    10. Catch ex As Exception 'Auch hier: Sollte der Versuch nicht erfolgen, wird auf das Scheitern, durch einer MSGBOX, hingewiesen.
    11. MsgBox("Der zu löschende Nullpunkt, befindet sich nicht im Speicher!", MsgBoxStyle.ApplicationModal, Nothing)
    12. End Try
    13. End If
    14. End Sub



    Schon etwas peinlich der Fehler ^^

    Gruss

    Hutti schrieb:

    VB.NET-Quellcode

    1. Step 1
    kannst Du ersatzlos streichen.
    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!

    Hutti schrieb:

    nochmals durchgehen
    Hast Du geglaubt, Du seiest fertig?
    Niemals. ;)
    Ein Kollege meinte mal, dass jede nicht getestete Zeile Codes falsch ist. Ich pflichte ihm bei.
    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!
    :P Dein Kollege ist ein weiser Mann!

    Die Fehlermeldung, sobald ich nicht das als erstes vorkommende, Element löschen will, kommt nach wie vor.

    Was ich vergessen habe: Die Variable "NPAuswahl" wird ebenfalls noch bearbeitet

    VB.NET-Quellcode

    1. Private Sub Nullpunkt_SelectedIndexChanged() Handles Nullpunkt.SelectedIndexChanged
    2. NPAuswahl = Nullpunkt.SelectedIndex * 5
    3. End Sub


    Ich habe einen "Prüflabel" eingebaut, also ein Label der bei gewissen Aktionen, seinen .text wert ändert.
    Z.B habe ich bei einem SelectedIndexChanged, für die Combobox, den Label das jeweilig ausgewählte Index anzeigen lassen und auch das Resultat nach der Rechnung, wie im obigen Codeabschnitt zu sehen.
    Die Variabel "NPAuswahl" bekommt den richtigen Wert in Integer zugeteilt.
    Also sollte doch meine Rechnung aufgehen?
    Denn wenn ich den 2ten Nullpunkt in der Combobox auswähle, sieht dann die obige Methode in klarschrift so aus:
    1 * 5 das 1 steht für den ausgewählten Index und die 5 ist eine const die ich direkt in den Code geschrieben habe.
    Somit hat NPAuswahl den Wert: 5

    Wenn ich nun

    VB.NET-Quellcode

    1. For i = 1 To 5
    2. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht: Bezeichner / X-Off / Y-Off / Z-Off / Z-Messkorrektur
    3. Next

    anwende, sollte doch in jedem "Durchgang", das Element mit dem Index 5 in der List (Of String) gelöscht werden?

    Hutti schrieb:


    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.


    Kommt, wie gesagt, nur vor wenn ich nicht das als erstes vorkommende Element, in der Combobox, auswähle.
    Beim als erstes vorkommende Element, löscht es wie gewünscht und vorgestellt, alle, zum Bezeichner gehörenden, Werte.

    Hutti schrieb:

    interpretiere
    mal den Button Details.
    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!
    Spoiler anzeigen
    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.ArgumentOutOfRangeException: InvalidArgument=Value mit dem Wert 5 ist für index ungültig.
    Parametername: index
    bei System.Windows.Forms.ComboBox.ObjectCollection.get_Item(Int32 index)
    bei Creataster.Hauptseite.LöschenEinesNullpunktes() in S:\C\********\Eigene Programmier Projekte\Projekt IK220 MT101\Mein Projekt\Version 3.0\WindowsApplication1\WindowsApplication1\Hauptseite.vb:Zeile 255.
    bei Creataster.Hauptseite._Lambda$__R151-7(Object a0, EventArgs a1)
    bei System.Windows.Forms.Control.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    bei System.Windows.Forms.Button.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
    ----------------------------------------
    Creataster
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///C:/Users/Technologie/Desktop/CreatasterVerzeichnis/Creataster.exe.
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly-Version: 10.0.0.0.
    Win32-Version: 14.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
    ----------------------------------------
    System
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Core
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    ----------------------------------------
    System.Runtime.Remoting
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
    ----------------------------------------
    System.Configuration
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
    ----------------------------------------
    System.Xml
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34209 built by: FX452RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    ----------------------------------------
    mscorlib.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34209 built by: FX452RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle Ausnahmefehler an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht in diesem Dialogfeld behandelt.



    Nachtrag: 16.21 Uhr

    Ich habe gerade die Anwendung nochmals testen können und dabei, in der "Admineinstellung" das 2te Element als Schreibgeschützt markiert.
    Was zur Folge hat, dass es garnicht erst soweit kommt, dass der Index gesucht wird.
    Hier der Code:

    VB.NET-Quellcode

    1. Private Sub LöschenEinesNullpunktes() Handles LöschenNP.Click 'Methode für das löschen eines vorhandenen Nullpunktes
    2. If Schreibschutz.Contains(Nullpunkt.Items.Item(NPAuswahl)) And AlsAdminAktiv = False Then 'Insofern der Nullpunkt schreibgeschützt ist, wird dieser nicht gelöscht
    3. 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
    4. Else
    5. Try
    6. For i = 1 To 5 Step 1
    7. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht: Bezeichner / X-Off / Y-Off / Z-Off / Z-Messkorrektur
    8. Next
    9. OffsetExport()
    10. Catch ex As Exception 'Auch hier: Sollte der Versuch nicht erfolgen, wird auf das Scheitern, durch einer MSGBOX, hingewiesen.
    11. MsgBox("Der zu löschende Nullpunkt, befindet sich nicht im Speicher!", MsgBoxStyle.ApplicationModal, Nothing)
    12. End Try
    13. End If
    14. End Sub

    Da sollte eigentlich die MSGBOX aufgerufen werden, stattdessen kommt die Fehlermeldung und das MSGBOX wird garnicht aufgerufen.
    Also kommt das Programm garnicht bis zu der IF-Anfrage.

    VB.NET-Quellcode

    1. If Schreibschutz.Contains(Nullpunkt.Items.Item(NPAuswahl)) And AlsAdminAktiv = False Then

    Beim ersten Element, klappt das gut.

    Rote Farbe entfernt. ~Trade

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

    Hutti schrieb:

    Hauptseite.vb:Zeile 255.
    Welche Zeile ist das?
    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!
    So, nachdem ich den ganzen Code selber durchgelesen habe und dabei jeden Schritt visuell vorgestellt habe,
    (im Kopf debuggt quasi :D ) bin ich nun endlich darauf gekommen, wo das Problem liegt!

    Hier nochmals der Codeabschnitt:

    VB.NET-Quellcode

    1. Private Sub LöschenEinesNullpunktes() Handles LöschenNP.Click 'Methode für das löschen eines vorhandenen Nullpunktes
    2. If Schreibschutz.Contains(Nullpunkt.Items.Item(NPAuswahl)) And AlsAdminAktiv = False Then 'Insofern der Nullpunkt schreibgeschützt ist, wird dieser nicht gelöscht
    3. 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
    4. Else
    5. Try
    6. For i = 1 To 5 Step 1
    7. OffsetWerte.RemoveAt(NPAuswahl) 'Löscht: Bezeichner / X-Off / Y-Off / Z-Off / Z-Messkorrektur
    8. Next
    9. OffsetExport()
    10. Catch ex As Exception 'Auch hier: Sollte der Versuch nicht erfolgen, wird auf das Scheitern, durch einer MSGBOX, hingewiesen.
    11. MsgBox("Der zu löschende Nullpunkt, befindet sich nicht im Speicher!", MsgBoxStyle.ApplicationModal, Nothing)
    12. End Try
    13. End If
    14. End Sub


    Die Variable NPAuswahl, bekommt ja den Integer Wert des ausgelesenen Combobox.SelectedIndex und dann wird dieser mal 5 gerechnet.
    Das wird gemacht damit, laut der Speicherlogik, die ich beschlossen habe, nach Bezeichner, in der List(Of string) gelöscht wird.
    Denn jeder Nullpunkt besetzt 5 Indexes in der List(Of string).
    Index 0 für den Bezeichner, also den Namen.
    Index 1 für den X-Offset Wert
    Index 2 für den Y-Offset Wert
    Index 3 für den Z-Offset Wert
    Index 4 für den Messkorrektur Wert

    Und der nächste Nullpunkt dem entsprechend auch 5 ab Index 5
    Wenn ich in der Combobox einen Nullpunkt auswähle, dann ist dort ja nur der Bezeichner zu sehen.
    Der erste wäre dann SelectedIndex wert = 0
    Das mal 5 ergibt wieder 0 und das entsprich dem Index des ersten Nullpunktes in der List(Of string)
    Wenn ich nun das 2 Element auswähle in der Combobox, also den zweiten Nullpunkt, hat dieser den Index 1 und dieser wird mal 5 wohl 5 ergeben.
    Was den 2ten Nullpunkt in der List(Of string) entspricht. Also ist es schon richtig so!
    Der Fehler war jedoch den ausgerechneten Index, der eigentlich für das zurechtfinden in der List(Of string) gedacht war, in der IF-Abfrage zu verwenden.

    VB.NET-Quellcode

    1. If Schreibschutz.Contains(Nullpunkt.Items.Item(NPAuswahl)) And AlsAdminAktiv = False Then

    Dadurch entstand ein Fehler, denn sobald nicht das erste Element angewählt war, der stehts Index=0 ausgab, war der zu suchende Index stehst über 5. Da ich meist wenige Elemente, 2 bis 3, in der Combobox hatte,
    ergab es den Fehler. Hätte ich mehr gehabt, wären der Fehler bei der Behandlung der Abfrage passiert indem er den falschen Wert untersucht hätte.

    Daher folgend geändert:

    VB.NET-Quellcode

    1. If Schreibschutz.Contains(Nullpunkt.Items.Item(Nullpunkt.SelectedIndex)) And AlsAdminAktiv = False Then


    nun funktioniert es sauber :D

    Dennoch: ein herzliches Dankeschön an RodFromGermany für die kräftige Unterstützung/Hilfe ohne diese, ich nie auf die Lösung gekommen wäre.

    Gruss Hutti

    Hutti schrieb:

    im Kopf debuggt
    Das macht man im Code direkt. Gugst Du hier.
    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!

    RodFromGermany schrieb:

    Das macht man im Code direkt


    Ja natürlich würde ich es im "Einzelsatz" als erstes Probieren, doch leider ist das Gerät, auf dass mein Programm zugreift, auf dem Rechner, der Lasermaschine und auf diesen kann und darf ich nichts installieren ohne Einwilligung, so auch nicht Visual Studio.
    Deswegen musste ich es sozusagen, selbst suchen und mir die Folgen vorstellen. Der Einzelsatz ist auch bei uns sehr beliebt, wenn wir ein CNC-Programm schreiben, wird diese auch mit 0% Vorschub im Einzelsatz gestartet und langsam wird jeder Satz, mit genauer Beobachtung, durchgelassen, nicht durch-gewunken. ^^

    Gruss

    Hutti schrieb:

    nichts installieren
    Ich kenn das...
    Falls Du jedoch mit dem Laptop daneben sitzt und (in Grenzen) alle 10 Minuten eine neue Version draufschieben kannst, kannst Du quasi auch debuggen, indem Du einen Logfile generierst und in der interessanten Programmregion nach jeder Zeile Code eine entsprechende Logausgabe machst.
    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!