none
Probleme mit ComboBox.Items.Clear ??? RRS feed

  • Frage

  • Hallo.

    Ich versuche mich gerade an einer App für W10Mobile, die ich aber zuerst auf meinem Computer teste.

    Es funktioniert auch soweit ganz gut aber irgendwie komme ich jetzt nicht weiter.

    Ich habe mal meinen C# Code angehängt:

    namespace Werkzeugliste
    {
        /// <summary>
        /// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public static class Globals
            {
                public static string[,] WListe2 = new string[200, 10];
                public static string[] WArt = { "JETO", "JETR", "JETQ", "JET", "MCJ", "DETO", "DETR", "DETQ", "DET", "DMCJ", "FD", "Andere" };
            }
            public MainPage()
            {
                this.InitializeComponent();
                int zahl = 0, i = 0, a = 0, b = 0;
                string Auswahl = "", temp = "";
               XmlReader reader = XmlReader.Create("Werkzeuge.xml");
                    while (reader.Read())
                    {
                        switch (reader.NodeType)
                        {
                            case XmlNodeType.Text:
                                Auswahl = reader.Value;
                                Globals.WListe2[i, zahl] = Auswahl;
                                zahl++;
                            if (zahl > 8)
                            {
                                Auswahl = Globals.WListe2[i, 0];
                                for (a = 0; a <= 10; a++)
                                {
                                    temp = Globals.WArt[a];
                                    b = Auswahl.IndexOf(temp);
                                    if (b >= 0)
                                    {
                                        Globals.WListe2[i, zahl] = temp;
                                        a = 10;
                                    }
                                }
                                if (Globals.WListe2[i,9] == "")
                                {
                                    Globals.WListe2[i, 9] = Globals.WArt[11];
                                }
                                zahl = 0;
                                i++;
                            }
                            break;
                        }
                    }
                for (i = 0; i <= (Globals.WArt.Length - 1); i++)
                {
                    Auswahl = Globals.WArt[i];
                    coWAuswahl.Items.Add(Auswahl);
                }
                coWAuswahl.SelectedIndex = 0;
                Boxfuellen();
            }
    
            private void coAuswahl_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                WDaten(coAuswahl.SelectedItem.ToString());
            }
    
            private void coWAuswahl_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                Boxfuellen();
            }
    
            public void Boxfuellen()
            {
                int q = 0;
                string Auswahl = "", temp = "";
                temp = Globals.WArt[coWAuswahl.SelectedIndex];
    //            coAuswahl.Items.Clear();
                while (true)
                {
                    Auswahl = Globals.WListe2[q, 0];
                    if (Auswahl == null)
                    {
                        break;
                    }
                    if (Globals.WListe2[q, 9] == temp)
                    {
                        coAuswahl.Items.Add(Auswahl);
                    }
                    q++;
                }
                coAuswahl.SelectedIndex = 0;
                WDaten(coAuswahl.SelectedItem.ToString());
            }
    
            public void WDaten(string Auswahl)
            {
                int p = 0;
                string andere = "";
                while (true)
                {
                    andere = Globals.WListe2[p, 0];
                    if (Auswahl == andere)
                    {
                        listWDaten.Items.Clear();
                        listWDaten.Items.Add("Umfang        : " + Globals.WListe2[p, 2]);
                        listWDaten.Items.Add("Gewicht       : " + Globals.WListe2[p, 7]);
                        listWDaten.Items.Add("Gwicht mit KB : " + Globals.WListe2[p, 8]);
                        listWDaten.Items.Add("Soll Zyklus   : " + Globals.WListe2[p, 3]);
                        listWDaten.Items.Add("IML Zyklus    : " + Globals.WListe2[p, 4]);
                        listWDaten.Items.Add("KB Zyklus     : " + Globals.WListe2[p, 5]);
                        listWDaten.Items.Add("Soll Zyklus   : " + Globals.WListe2[p, 3]);
                        listWDaten.Items.Add("Kavitäten     : " + Globals.WListe2[p, 1]);
                        listWDaten.Items.Add("Kategorie     : " + Globals.WListe2[p, 6]);
                        break;
                    }
                    p++;
                }
            }
        }
    }
    

    Wie in dem Code zu sehen ist musste ich die coAuswahl.Items.Clear() still legen.

    Wenn ich diese Zeile benutze ( und das ist mein Problem weil ich brauche die ) kommt eine NullReferenceException Fehlermeldung.

    Seltsamerweise, wenn ich diese Zeile lasse und dafür die Zeile Boxfuellen() in coWAuswahl_SelectionChanged still lege läuft das Programm auch.

    Also entweder Boxfuellen() oder coAuswahl.Items.Clear().

    Hat jemand eine Idee warum das so ist ?

    Ich kann leider kein Bild anhängen weil mein Konto noch geprüft wird.

    Gruß,

    Oetti

    Samstag, 22. Oktober 2016 16:53

Antworten

Alle Antworten

  • Hallo,

    das hört sich für mich so an als ob coAuswahl noch nicht da ist. Setzt doch mal ein Breakpoint bei coAuswahl.Items.Clear() und schau ob es null ist.

    Gruß

    Thomas


    Icon für UWP: https://www.microsoft.com/store/apps/9nblggh5fzpm

    Samstag, 22. Oktober 2016 17:20
  • Hallo Thomas.

    Wie schon oben beschrieben funktioniert coAuswahl.Items.Clear() wenn ich die Boxfuellen() still lege.

    Dann sind die Daten in coAuswahl gelöscht. Andersherum funktioniert Boxfuellen(), nur seltsamerweise sind die Daten in coAuswahl dann doppelt.

    Und die erste Fehlermeldung kommt dann bei coAuswahl_SelectionChangend bei WDaten(coAuswahl.SelectedItem.ToString(). Dort ist der Wert dann NULL.

    Ich hatte auch schon versucht mit einer Schleife die Items in coAuswahl zu löschen und dann neu zu füllen.

    Funktioniert aber nur wenn ich mindestens ein Item in coAuswahl lasse.

    Wenn ich alle lösche ist direkt wieder die Fehlermeldung da.

    (Kann leider immer noch kein Bild anhängen)

    Gruß,

    Oetti


    Samstag, 22. Oktober 2016 17:41
  • Du führst doch auch 2 mal Boxfuelen aus.

    Durch setzten des Index mit coWAuswahl.SelectedIndex = 0; löst du coWAuswahl_SelectionChanged aus

    Und dann gleich nochmal darunter

    Das ist ein klassischer Logikfehler.

    Setzte einfach bitte in alle Methoden breakpoints und schau dir das an


    Icon für UWP: https://www.microsoft.com/store/apps/9nblggh5fzpm

    Samstag, 22. Oktober 2016 20:02
  • Hallo Thomas.

    Ich habe es hinbekommen. Ich musste wirklich das obere Boxfuellen() löschen, dann klappte es.

    Und bei dem coAuswahl_SelectionChanged habe ich vor dem WDaten eine Abfrage eingebaut.

    Jetzt läuft es so wie es soll.

    Vielen Dank.

    Gruß,

    Oetti

    Sonntag, 23. Oktober 2016 11:45