none
Werte von textbox in Klasse speichern RRS feed

  • Frage

  • Hallo,

    Ich schreibe gerade ein Programm um Formen anzulegen. Ich habe 5 Fenster erstellt im ersten fenster kommt man mit Hilfe des buttons "Neu" zu dem 2. Fenster in welchem man auswählen kann welche Form angelegt werden soll, in meinem Fall "Kreis", "Dreieck" oder "Viereck". Wenn man sich für eine Form entschieden hat kommt man zum entsprechenden Fenster in welchem man "Name" und "Seitenlänge" eingeben kann.

    Meine Frage ist: Wie kann ich die Daten,welche in die Textbox "Name" und "Seitenlänge" in einer Klasse speichern, sodass die Daten nacher in einer Listbox (im ersten Fenster) erscheinen. Und wenn es dort erscheint sollte man noch mit Hilfe von Buttons den Flächeninhalt der angelegten Form berechen können.

    Ich hoffe ich habe alles verständlich erläutert.

    Danke schon mal im Voraus:D

    Freitag, 6. April 2018 17:33

Antworten

  • Hi,
    nachfolgend mal eine Demo, die eine der möglichen Lösungsvarianten zeigt. Gestartet wird Form1. Mit dem Button wird der Einfachkeit halber Form1 als weitere neue Instanz gestartet. Auf Form1 ist eine TextBox. Die Text-Eigenschaft der TextBox ist gebunden an eine Eigenschaft einer Klasse (Form1Data). Alle Form-Instanzen nutzen die gleiche Instanz der Klasse mit den Daten. Das wird erreicht über ein sog. Singleton Entwurfsmuster (Pattern). Mit der statischen Methode Instance wird immer ein Verweis auf die gleiche Instanz geliefert, so dass alle Forms mit den geleichen Daten arbeiten. Damit können Daten ´zwischen den Forms ausgetauscht/übertragen werden, ohne dass sich die Forms kennen. Jede Form muss lediglich den Zugang zum Singleton kennen.

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
    
        private Button btn = new Button() { Text = "neue Form", Dock = DockStyle.Top };
        private TextBox tb = new TextBox() { Dock = DockStyle.Top };
        private void Form1_Load(object sender, EventArgs e)
        {
          this.Controls.AddRange(new Control[] { tb, btn });
          tb.DataBindings.Add("Text", Form1Data.Instance(), "Data");
          btn.Click += (object s, EventArgs ea) => { (new Form1()).Show(); };
        }
      }
      public class Form1Data
      {
        private static Form1Data _instance;
        public static Form1Data Instance()
        {
          if (_instance == null) _instance = new Form1Data();
          return _instance;
        }
        public string Data { get; set; }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Sonntag, 8. April 2018 12:59

Alle Antworten

  • Hi,
    man kann eine statische Klasse mit Eigenschaften erstellen, die die Werte halten. Darauf können dann alle anderen Objekte (Formen) zugreifen und es stehen überall die gleichen Werte zur Verfügung.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Freitag, 6. April 2018 18:35
  • Danke für die schnelle Antwort.

    Ich weiß aber irgendwie immer noch nicht wie das geht ich zeig dir mal meinen code.

    namespace Formen2
    {
        class Viereck
        {
            
            public string Name;
            public string Seitenläge;
    
            public Viereck()
            {
    
            }
    
            void SetName(string Name)
            {
                Viereckanlegen newviereckanlegen = new Viereckanlegen();
                this.Name = newviereckanlegen.NeuesViereck;
            }
                
        }
    }
    die daten von Name und Seitenlänge werden irgendwie nicht gespeichert und ich weiß nicht wie ich es mit einer statischen Klasse machen muss.

    Samstag, 7. April 2018 16:37
  • Hi,
    nachfolgend mal eine Demo, die eine der möglichen Lösungsvarianten zeigt. Gestartet wird Form1. Mit dem Button wird der Einfachkeit halber Form1 als weitere neue Instanz gestartet. Auf Form1 ist eine TextBox. Die Text-Eigenschaft der TextBox ist gebunden an eine Eigenschaft einer Klasse (Form1Data). Alle Form-Instanzen nutzen die gleiche Instanz der Klasse mit den Daten. Das wird erreicht über ein sog. Singleton Entwurfsmuster (Pattern). Mit der statischen Methode Instance wird immer ein Verweis auf die gleiche Instanz geliefert, so dass alle Forms mit den geleichen Daten arbeiten. Damit können Daten ´zwischen den Forms ausgetauscht/übertragen werden, ohne dass sich die Forms kennen. Jede Form muss lediglich den Zugang zum Singleton kennen.

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
    
        private Button btn = new Button() { Text = "neue Form", Dock = DockStyle.Top };
        private TextBox tb = new TextBox() { Dock = DockStyle.Top };
        private void Form1_Load(object sender, EventArgs e)
        {
          this.Controls.AddRange(new Control[] { tb, btn });
          tb.DataBindings.Add("Text", Form1Data.Instance(), "Data");
          btn.Click += (object s, EventArgs ea) => { (new Form1()).Show(); };
        }
      }
      public class Form1Data
      {
        private static Form1Data _instance;
        public static Form1Data Instance()
        {
          if (_instance == null) _instance = new Form1Data();
          return _instance;
        }
        public string Data { get; set; }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Sonntag, 8. April 2018 12:59