none
Array füllen + Array in Textbox ausgeben [update] RRS feed

  • Frage

  • Hallo,

    ich habe eine einfache Frage, da ich aber C#-Anfänger bin finde ich keine lösung!

    Ich wil folgendes erreichen:

    1. Ich habe eine Textbox in die ein Wert eingetragen wird.

    2. Ich drücke den Button. Danach: Soll der Wert in ein Array gespeichert werden und die Textfelder gelöscht werden.

    3. Und danach wieder von vorne.

    Das Problem besteht darin, wie muss die Schleife aussehen, damit der vorhergehende Wert nicht überschrieben wird.

    Danke...


    • Bearbeitet Oliwood15 Montag, 5. März 2012 17:01 neuer Titel!
    Dienstag, 28. Februar 2012 15:15

Antworten

  • Hallo,

    das solltest du mit dem folgenden Beispiel hinbekommen (ungetestet):

    foreach (Punkt item in Punktespeicher.Punkte)
    {
       txtBox.Text += string.Format("\r\n{0} | {1} | {2} | {3}", item.PKT_Name, item.PKT_Y, item.PKT_X, item.PKT_H);
    }

    Oder wahrscheinlich performanter (ungetestet):

    StringBuilder sb = new StringBuilder();
    
    foreach (Punkt item in Punktespeicher.Punkte)
    {
       sb.AppendFormat("{0} | {1} | {2} | {3}\r\n", item.PKT_Name, item.PKT_Y, item.PKT_X, item.PKT_H);
    }
    
    txtBox.Text = sb.ToString();

    Sollte so oder so ähnlich funktionieren.


    Gruß
    Rudolf

    "Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw

    • Als Antwort markiert Oliwood15 Mittwoch, 12. September 2012 13:55
    Mittwoch, 12. September 2012 07:17
  • Hallo RudolfG,

    vielen Dank für deine Antwort.

    Ich habe die Variante mit dem StringBuilder ausprobiert, aber leider funktioniert diese noch nicht wie erwünscht.

    Jetzt wird immer nur der erste Wert der Liste angezeigt.

     private void Aktualisieren_Click_1(object sender, RoutedEventArgs e)
            {
    
    
                StringBuilder sb = new StringBuilder();
    
                foreach (Punkt item in Punktespeicher.Punktliste)
                {
                    sb.AppendFormat("{0} | {1} | {2} | {3}\r\n", item.PKT_Name, item.PKT_Y, item.PKT_X, item.PKT_H);
                }
    
                Punktliste_Ausgabe.Text = sb.ToString();               
    
            }

    Hast du eventuell noch eine Idee?

    • Als Antwort markiert Oliwood15 Mittwoch, 12. September 2012 13:55
    Mittwoch, 12. September 2012 08:17
  • Okay, jetzt funktioniert es!

    Ich verwende einfach ein TextBlock, anstatt eine TextBox, und damit funktioniert es super!

    Vielen Dank für eure Unterstützung!

    • Als Antwort markiert Oliwood15 Mittwoch, 12. September 2012 13:55
    Mittwoch, 12. September 2012 13:55

Alle Antworten

  • Also ich würde zum Abspeichern eine ArrayList nehmen. Mit arrayList.AddRange ( ich glaube so hieß der Befehl), fügst du ein Element hinzu (geht bis 64MB).

    Als in Code müsste das in etwa so aussehen:

    public static ArrayList array;
    
    btnClick
    {
    if(array==null)
    array=new ArrayList();
    array.AddRange(tbInput.Text);
    tbInput.Text="";
    }

    Ich hoffe so funktionierts.
    Dienstag, 28. Februar 2012 17:15
  • Aber wie kann ich bei deinem Beispiel festlegen an welche Stelle in der Liste der Wert muss.

    So sieht aktuell mein Code aus zum hinzufügen aus. Mir fehlt jetzt eine "Idee", wie ich i hochzählen kann.

    //Zu Array hinzufügen
    
    int i = 0;
                   
    Punktespeicher.Punktliste[i] = Punkt;
    Aber trotzdem vielen Dank!
    Dienstag, 28. Februar 2012 18:54
  • Also bei meine Beispiel hat der Array keine vordefinierte Größe und der Block wird einfach am Ende angehängt (siehe oben).

    Fall du ein Array fester Größe hast, kannst du es auch so machen:

    public class SomeClass
    {
    private static int i;
    private Array[string] someArray;
    
    public void DoSomething(string anyString)
    {
    if(someArray==null)
    someArray = new Array[25];
    someArray[i] = anyString;
    ++i;
    }
    }

    Das müsste mit allen Array Arten funktionieren, der Zähler muss nur außerhalb der Methode statisch definiert sein.
    Mittwoch, 29. Februar 2012 14:54
  • Mir wäre eine Arraylist ohne vordefinierte Länge lieber.

    Aber ich bekomme immer eine Fehlermeldung, wenn ich eine Arraylist erstelle.

    (Der Namespace Arraylist konnte nicht gefunden werden.)

    Ich habe jetzt so umgesetzt:

    if (Punktespeicher.Punktliste == null)
    Punktespeicher.Punktliste = new ArrayList();
    Punktespeicher.Punkstliste.Add(Punkt);
    Es funktioniert leider nicht, da er nicht mit der Arraylist zurecht kommt!

    Mittwoch, 29. Februar 2012 19:43
  • Okay, also eine Arraylist unterstützt Silverlight nicht.

    Die Alternative in Silverlight nennt sich List und wird ähnlich verwendet.

    Jetzt funktioniert das Füllen ohne Probleme, aber mir fehlt jetzt noch guter Weg, um mir den kompletten Inhalt der Liste in einem Textblock ausgeben zulassen.

    Ich hoffe es hat jmd eine Idee. Ich habe es schon mit einer Foreach-Schleife versucht, aber leider zeigt es mir so immer nur den zuletzt gespeicherten Wert an.


    • Bearbeitet Oliwood15 Donnerstag, 1. März 2012 21:54
    Donnerstag, 1. März 2012 21:53
  • Wenn du bestimmte Felder auslesen lassen möchtest und später wieder irgendwo ausgeben willst und evtl. das Problem hast, dass der mögliche Inhalt an Stelle X ausgegeben wird und das der Wert Y an einer anderen Stelle steht, würde ich dir vorschlagen XML Serialisierung u. Deserialsierung zu benutzen anstatt arrays.
    Samstag, 3. März 2012 14:14
  • Ohh... das klingt erstmal kompliziert für einen C#-Anfänger, wie mich.

    Hast du eventuell eine gute Anleitung für mich?

    Danke für deine Hilfe.

    Montag, 5. März 2012 16:54
  • Hallo,

    ich hab das jetzt so umgesetzt.

    //Aus Textfeld auslesen
    
                    string PKT_Name_string = PKT_Name.Text;
                    string PKT_Y_string = PKT_Y.Text;
                    string PKT_X_string = PKT_X.Text;
                    string PKT_H_string = PKT_H.Text;
                   
                   
                    //Punkt erstellen
    
                    Punkt Punkt = new Punkt();
    
                    Punkt.PKT_Name = PKT_Name_string;
                    Punkt.PKT_Y = Convert.ToDouble(PKT_Y_string, System.Globalization.CultureInfo.CurrentCulture);
                    Punkt.PKT_X = Convert.ToDouble(PKT_X_string, System.Globalization.CultureInfo.CurrentCulture);
                    Punkt.PKT_H = Convert.ToDouble(PKT_H_string, System.Globalization.CultureInfo.CurrentCulture);
    
                    //Zu Array hinzufügen
    
                    Punktespeicher.Punktliste.Add(Punkt);

    Wie kann ich jetzt am sinnvollsten eine Ausgabe umsetzen?

    Die Liste soll jetzt Zeile für Zeile in TextBox geschrieben werden!


    • Bearbeitet Oliwood15 Mittwoch, 12. September 2012 06:56
    Dienstag, 11. September 2012 21:19
  • Hallo,

    das solltest du mit dem folgenden Beispiel hinbekommen (ungetestet):

    foreach (Punkt item in Punktespeicher.Punkte)
    {
       txtBox.Text += string.Format("\r\n{0} | {1} | {2} | {3}", item.PKT_Name, item.PKT_Y, item.PKT_X, item.PKT_H);
    }

    Oder wahrscheinlich performanter (ungetestet):

    StringBuilder sb = new StringBuilder();
    
    foreach (Punkt item in Punktespeicher.Punkte)
    {
       sb.AppendFormat("{0} | {1} | {2} | {3}\r\n", item.PKT_Name, item.PKT_Y, item.PKT_X, item.PKT_H);
    }
    
    txtBox.Text = sb.ToString();

    Sollte so oder so ähnlich funktionieren.


    Gruß
    Rudolf

    "Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw

    • Als Antwort markiert Oliwood15 Mittwoch, 12. September 2012 13:55
    Mittwoch, 12. September 2012 07:17
  • Hallo RudolfG,

    vielen Dank für deine Antwort.

    Ich habe die Variante mit dem StringBuilder ausprobiert, aber leider funktioniert diese noch nicht wie erwünscht.

    Jetzt wird immer nur der erste Wert der Liste angezeigt.

     private void Aktualisieren_Click_1(object sender, RoutedEventArgs e)
            {
    
    
                StringBuilder sb = new StringBuilder();
    
                foreach (Punkt item in Punktespeicher.Punktliste)
                {
                    sb.AppendFormat("{0} | {1} | {2} | {3}\r\n", item.PKT_Name, item.PKT_Y, item.PKT_X, item.PKT_H);
                }
    
                Punktliste_Ausgabe.Text = sb.ToString();               
    
            }

    Hast du eventuell noch eine Idee?

    • Als Antwort markiert Oliwood15 Mittwoch, 12. September 2012 13:55
    Mittwoch, 12. September 2012 08:17
  • Guck dir bitte die TextBox.Multiline-Eigenschaft an, dass sollte dein Problem dem ersten Eintrag in der TextBox beheben.

    Gruß
    Rudolf

    "Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw

    Mittwoch, 12. September 2012 09:24
  • Okay, jetzt funktioniert es!

    Ich verwende einfach ein TextBlock, anstatt eine TextBox, und damit funktioniert es super!

    Vielen Dank für eure Unterstützung!

    • Als Antwort markiert Oliwood15 Mittwoch, 12. September 2012 13:55
    Mittwoch, 12. September 2012 13:55