Announcement

Collapse
No announcement yet.

Problem mit Array

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Array

    Hallo zusammen!

    Ich versuch mal mein Problem so einfach wie möglich zu beschreiben.
    Ich habe 2 Forms, "Hauptform" und "Nebenform". In der Nebenform werden Werte eingestellt, die die Hauptform verwendet. Diese Daten speichere ich in einem Array, die Hauptform greift auf dieses Array mit einer Eigenschaft zu. Die Werte speichert die Nebenform beim schließen unter ...Properties.Settings.Default... ab.

    Diese Einstellungen sollen beim starten des Programms wieder geladen werden (es handelt sich um Farben, die die Hauptform verwendet). Deshalb ließt die Hauptform diese Daten ein.

    Diese Daten sollen bzw. müssen nun aber auch an Nebenform übergeben werden. Dazu habe ich wieder ein Array und eine Eigenschaft erstellt. Damit die Daten jetzt aber von der Nebenform verwendet werden können, wollte ich diese in Felder übertragen. Also per Index die Array - Inhalte an Felder übergeben. Und genau das bekomm ich nicht hin.

    Ich hoffe ich konnte eingiermaßen verständlich machen, wo mein Problem liegt, und hoffe Ihr könnt mir helfen. Vielen Dank schon mal...

  • #2
    Auch hallo,

    irgendwie erinnert das Problem an FAQ - Kommunikation von 2 Forms von mycsharp.de. Der dort genannte Link zu Codeproject könnte hier auch weiterhelfen: http://www.codeproject.com/KB/cs/pas...een_forms.aspx
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Hallo,

      Markus könnte recht haben mit seinem Hinweis. Ich glaube aber, dass Du das schon richtig durchdacht hast. Leider schreibst Du nicht, inwiefern das Zuweisen und Auslesen der Array-Werte zu Problemen führt. Liegt es vielleicht an der festen Größe eines Arrays und der Initialisierung aller Einzelwerte?

      Mein Vorschlag ist, dass Du für die Datenübergabe eine eigene Klasse Options erstellst, die auch selbst den Austausch mit app.config und user.config steuert. In der MainForm wird eine Instanz erstellt, und diese Instanz wird per Referenz an das OptionsForm übergeben. Dann hast Du alle Werte, die Du verarbeiten willst, direkt mit dem richtigen Typ zur Verfügung und bist flexibel mit Erweiterungen.

      Gruß Jürgen

      Comment


      • #4
        Die Größe des Arrays ist fest, weil damit zwei Farben also 6 RGB int Werte übergeben werden, das Problem besteht darin, die einzelnen Farbwerte, also rot grün blau, die in einem Methode aus dem Array geholt werden, dann Feldern zuzuweisen. Aus diesen Feldern soll dann die Klasse ihre Werte holen.
        Ums mal praktisch zu erklären, in der Nebenform stelle ich die Farben ein, die beim schließen gespeichert werden. Diese Farben nutzt die Hauptform für eine ProgressBar. Nun soll die Benutzereinstellung natürlich beim nächsten öffnen der Form erhalten bleiben, deshalb ließt die Hauptform selbst die Daten wieder ein. Damit nun die Nebenform beim erneuten öffnen diese Farben anzeigen kann (an den Trackbars, TextBoxen und Panel) holt sie die Werte aus den jeweiligen Feldern. Hier müssen die Farbwerte aber auch zum speichern vorhanden sein, was derzeit nicht der Fall ist.

        Ich habe den Code um Arrays und Eigenschaften erweitert, da ich anfangs nur öffentliche statische Felder hatte. Zwecks Objektorientierung und Integrität des Codes habe ich das abgeändert. Da die Methoden zum anzeigen und einstellen der Farben recht umfangreich sind, hätte ich diese gerne so gelassen, und die Felder stattdessen nicht statisch und private gemacht und ihnen die Werte aus dem Array zugewiesen...

        Comment


        • #5
          Hi,

          die Farben können direkt in den Settings gespeichert werden und sind somit auch persistent.

          Überall wo die Farbe bzw. die Farbwerte gebraucht werden kann die Eigenschaft aus den Settings gelesen werden.

          [highlight=c#]
          private void Form1_Load(object sender, EventArgs e)
          {
          Color color1 = Properties.Settings.Default.Color1;
          Color color2 = Properties.Settings.Default.Color2;

          int r1 = color1.R;
          }
          [/highlight]

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Das problem ist momentan, dass die Farben anscheinend nicht gespeichert werden.... Ich muß mir das nochmal genau anschauen....

            Comment


            • #7
              Das problem ist momentan, dass die Farben anscheinend nicht gespeichert werden
              Um die Einstellungen zu speichern muss dies auch durchgeführt werden.
              Ich (bzw. mein Programm) erledigt das als letze Anweisung bevor die Anwendung beendet wird.

              Program.cs:
              [highlight=c#]
              using System;
              using System.Windows.Forms;

              namespace WindowsFormsApplication1
              {
              static class Program
              {
              /// <summary>
              /// Der Haupteinstiegspunkt für die Anwendung.
              /// </summary>
              [STAThread]
              static void Main()
              {
              Application.EnableVisualStyles();
              Application.SetCompatibleTextRenderingDefault(fals e);
              Application.Run(new Form1());

              Properties.Settings.Default.Save();
              }
              }
              }
              [/highlight]

              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Ok ich habs.... so ne dumme Kleinigkeit wieder... ich hab die Felder als static gesetzt und nun geht alles....

                Danke für die Hilfe!

                Comment


                • #9
                  Oh je, jetzt werden zwar die Farben behalten, solange das Programm selbst offen ist, wenn ich aber auch die Hauptform schließe und wieder öffne, werden die Farben nicht angezeigt...
                  Ich poste hier mal den Code, der die Werte aus dem Array holen soll und an die Felder zuweisen...


                  privatestaticint redValueS, greenValueS, blueValueS;
                  privatestaticint redValueE, greenValueE, blueValueE;

                  privatevoid Get_Settings()
                  {
                  Form1 frm = newForm1();
                  int[] array = frm.readColors;
                  int redValueS = array[0];
                  int greenValueS = array[1];
                  int blueValueS = array[2];
                  int redValueE = array[3];
                  int greenValueE = array[4];
                  int bluevalueE = array[5];
                  }

                  P.s: Sorry, irgendwie klappt das nicht richtig mit [highlight=c#]...
                  Zuletzt editiert von brown78; 07.11.2008, 14:13.

                  Comment


                  • #10
                    Ich hab jetzt mal zum testen einem der Felder einen festen Wert zugewiesen:
                    private static int redValueS = 123,... Und beim ersten öffnen der Form wurde dieser Farbwert dann auch angezeigt, also ist das Problem tatsächlich, dass die Werte aus dem Array nicht in den Feldern vorliegen...

                    Ich hab weiterhin mal dem Feld redValueS den Wert direkt aus den Properties zugewiesen und nun wurde die eingestellte Farbe auch nach dem Schließen und öffnen des Programms wieder korrekt angezeigt.

                    Das heist, die Werte werden richtig gespeichert. Es scheint also definitiv daran zu liegen, dass die Werte entweder nicht richtig in das Array gelesen werden (glaub ich aber nicht) oder, was wahrscheinlicher ist, dass die Felder die Werte aus dem Array nicht bekommen...
                    Zuletzt editiert von brown78; 07.11.2008, 15:08.

                    Comment


                    • #11
                      http://entwickler-forum.de/showpost....64&postcount=5
                      Warum kompliziert, wenn es einfach geht?
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment


                      • #12
                        Ja ok... Ich hab ein bisschen umständlich gedacht, es funktioniert aber ganz so...
                        Das mit dem Array hat so schön geklappt, dass ich gleich noch eins wollte...
                        Dachte irgendwie, dass die Hauptform beim öffnen die Settings lesen muß, um diese zu verwenden...

                        Danke für die Hilfe!
                        Und machts gut, bis zum nächsten Mal!

                        Comment

                        Working...
                        X