Announcement

Collapse
No announcement yet.

Eine Form für mehrere Zwecke

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

  • Eine Form für mehrere Zwecke

    Hallo zusammen!

    Ich habe eine Form, in der ich Farben verschiedener Elemente, bspw. MenuBar, ProgressBar usw., einstellen möchte. Dazu habe ich eine weitere Form, in der ich zwei Farben für einen Farbverlauf definiere.

    Bisher kann ich problemlos die Farben für ein Element einstellen. Wie kann ich es jetzt erreichen, dass ich über ein MenuBarItem die Form in einer neuen Instanz aufrufe und die Farben für ein anderes Elemént einstellen kann, ohne das die des ersten Elements beeinflusst werden?

    Geht das und ist das sinnvoll, oder ist es besser, einfach eine zweite Form zu erstellen?

  • #2
    Hallo,

    so wiederholen sich die Fragen und Antworten: Ich hatte Dir schon gestern bei "Problem mit Array" eine eigene Klasse Options vorgeschlagen. Wenn Du es so machen würdest, würden alle Einstellungen erhalten bleiben, und Du könntest problemlos in einem Formular einmal die Eigenschaft A und ein andermal die Eigenschaft B bearbeiten.

    Ähnlich geht es auch mit dem Array, indem Du Dich auf einen Eintrag beziehst; dann bleiben natürlich die Einträge der anderen Indizes unverändert.

    Oder verstehe ich Dich ganz falsch? Jürgen

    Comment


    • #3
      Das Problem mit dem Array hat sich geklärt...
      Ich hatte von Anfangan eine eigene Methode, um die Daten in die Arrays zu speichern...
      Kurz gesagt möchte ich mit ein und derselben Form, die Farben von zwei Elementen ändern. Dies soll unabhängig voneinander geschehen, die Form soll also beim öffnen erkennen, ob sie über den Menüpunkt "A" oder "B" geöffnet wurde und demnach die eingestellten werde in unterschiedliche Arrays legen...
      Die Form soll also "erkennen" für welches Element sie die Farbe festlegt.
      Zuletzt editiert von brown78; 08.11.2008, 13:29.

      Comment


      • #4
        Originally posted by brown78 View Post
        die Form soll also beim öffnen erkennen, ob sie über den Menüpunkt "A" oder "B" geöffnet wurde und demnach die eingestellten werde in unterschiedliche Arrays legen...
        Das musst Du dem Formular irgendwie mitteilen: Entweder Du erstellst im Options-Formular eine Eigenschaft, die diese Auswahl registriert und durch den Menüpunkt festgelegt wird. Oder Du erstellst eine zusätzliche Variante der Show-Methode (bzw. von ShowDialog), in dem die Auswahl angegeben wird. (Vielleicht gibt es noch weitere Möglichkeiten, aber diese fallen mir jetzt ein.)

        Jürgen

        Comment


        • #5
          Warum sollte deine Farbeinstellungsdialog etwas vom dem Context wissen in dem es aufgerufen wird? Das hört sich irgendwie falsch an.

          Du hast deinen Einstelldialog, gibst Defaultwerte für die Farben rein und bekommst am Ende des Dialogaufrufs Farbwerte zurück. Wofür die dann verwendet werden sollte doch egal sein. Ist Problem des Aufrufers und nicht das des Farbeinstelldialogs.

          Als Beispiel stell dir den OpenFileDialog vor. Wäre ja ziemlich blöd wenn ich den nicht mehr verwenden könnte sobald ich ihn ein 2.tes mal brauche für ein ganze anderes File.

          Comment


          • #6
            Baim OpenFileDialog ist aber klar an welche Stelle das File geladen wird (z.B. Word)...
            Wenn schon ein Wordfenster mit einer Datei geöffnet ist, wird ein neues Fenster geöffnet. Das ist bei mir aber sinnlos, da ich ja in ein und der selben Hauptform verschiedene Elemente unterschiedlich färben will.

            Jürgen hat da einen Hnweis gegeben auf eine Eigenschaft die diese Eingabe registriert, und dannach dann, meinetwegen die Methode zum speichern der Werte überschreibt und unter anderem Namen speichert...

            Frage nur: wie muß diese Eigenschaft aussehen? Sie soll also auf ein MenuItem_Click reagieren und anhand des Items eine bzw. mehrere überschreibene Methoden aufrufen...

            Comment


            • #7
              Kann ich da nicht die Form zum einstellen ableiten, und die Methoden überschreiben, die die Werte speichern und an die Hauptform übergeben?
              Ich werd das mal versuchen...

              Comment


              • #8
                Mal ein CodeBeispiel damit klarer wird was ich meine.

                Ich nehme einfach mal im folgenden Code an dein Dialog zur Farbauswahl heißt MyColorSelectDialog und hat ein Property für die einzustellende Farbe mit Namen SelectedColor(get und set). Dann läßt sich der ganz simple für mehrere Contexte verwenden hier für BackColor und ForeColor der Form. Das läßt sich natürlich genauso leicht für mehrer Farben erweitern


                [HIGHLIGHT=C#]private void AToolStripMenuItem_Click(object sender, EventArgs e)
                {
                using (MyColorSelectDialog dlg = new MyColorSelectDialog())
                {
                dlg.SelectedColor = this.BackColor;
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                this.BackColor = dlg.SelectedColor;
                }
                }
                }

                private void BToolStripMenuItem_Click(object sender, EventArgs e)
                {
                using (MyColorSelectDialog dlg = new MyColorSelectDialog())
                {
                dlg.SelectedColor = this.ForeColor;
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                this.ForeColor = dlg.SelectedColor;
                }
                }
                }[/HIGHLIGHT]

                Comment


                • #9
                  Ja ok so weit hab ichs verstanden... Da kommt aber noch hinzu, glaub ich hab das nicht erwähnt, dass die eingestellten Farben in den Properties.Settings.Default gespeichert werden, deswegen muß die Form auf den Aufrufer reagieren, sonst werden ja die Werte von: AToolStripMenuItem durch BToolStripMenuItem überschrieben...

                  Comment


                  • #10
                    Dein Einstelldialog speichert die Farben? Wenn ja wäre das ne blöde Idee.

                    Comment


                    • #11
                      Du sollst ja praktisch einen Farbahldialog erstellen. Der verhält sich dann durch seine Property wie eine Funktion. Du rufst auf und erhälst über die Property einen Rückgabewert. Den kannst ud dann speichern oder beliebig weiterverwenden. Nur in der Farbwahlform darfst du halt net auf die my.settings zugreifen oder so sondern nur auf die Property.
                      Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                      Comment


                      • #12
                        Wieso ist das blöd? Die eingestellte Farbe soll ja beim Öffnen weider da sein...
                        Hab das aus einem Buch übernommen...

                        Ähm um das mal anzumerken: Ich verwende nicht den ColorDialog!
                        Ich habe eine eigene Form entworfen mit TrackBars zum einstellen (einfach ums selbst gemacht zu haben und wegen des Lerneffekts)

                        Comment


                        • #13
                          Das ist blöd weil du mit einem Dialog 2 Dinge lösen willst (einstellen der Farbe und speichern der Farbe) aber nur eine dieser Aufgaben läßt sich sinnvoll wiederverwenden.

                          Wenn du den Wert einer Property speichern willst dann ist es eher die Aufgabe der Klasse zu der die Property gehört aber nicht die des Einstelldialogs.

                          Bezogen auf mein Beispiel wo ich die Background und Foreground Color einer Form einstelle ist es Aufgabe der Form diese zu speichern und nicht die des Einstelldialogs.

                          Comment


                          • #14
                            Aha, ok... Das ändert die Sache dann natürlich etwas...
                            Dann werd ich das mal ändern...

                            Comment


                            • #15
                              Bezogen auf mein Beispiel von eben. Wenn du die Farbproperties per PropertyBinding (im Winformsdesigner unter ApplicationSettings/PropertyBinding) in der eigentlichen Form gebunden hast mußt du nach dem Aufruf des Einstelldialogs nur noch mal Save aufrufen und die Sache mit dem speichern ist erledigt.

                              [Highlight=C#]private void AToolStripMenuItem_Click(object sender, EventArgs e)
                              {
                              using (MyColorSelectDialog dlg = new MyColorSelectDialog())
                              {
                              dlg.SelectedColor = this.BackColor;
                              if (dlg.ShowDialog() == DialogResult.OK)
                              {
                              this.BackColor = dlg.SelectedColor;
                              Properties.Settings.Default.Save();
                              }
                              }
                              }

                              private void BToolStripMenuItem_Click(object sender, EventArgs e)
                              {
                              using (MyColorSelectDialog dlg = new MyColorSelectDialog())
                              {
                              dlg.SelectedColor = this.ForeColor;
                              if (dlg.ShowDialog() == DialogResult.OK)
                              {
                              this.ForeColor = dlg.SelectedColor;
                              Properties.Settings.Default.Save();
                              }
                              }
                              }[/Highlight]

                              Comment

                              Working...
                              X