Announcement

Collapse
No announcement yet.

synchrone Eingabe über mehrere UserControls

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

  • synchrone Eingabe über mehrere UserControls

    Hallo

    Ich habe in meine WinForm-Anwendung (C#) ein UserControl erstellt, welches einige Eingabefelder, eine Trackbar, eine Checkbox usw enthält. Ein UserControl dient zur Darstellung eines structs.
    In meinem Dialog erzeuge ich nun dynamisch mehrere Instanzen dieses UserControls, um mehrere structs darzustellen und zu modifizieren.
    Um dem Anwender Aufwand zu ersparen, möchte ich, dass er die Möglichkeit hat, bestimmte Eingaben in einem der UserControls zu tätigen und diese Ereignisse (Eingaben, Klicks...) sollen parallel an die äquivalenten Elemente auf den anderen Usercontrols weitergereicht werden (weleche Usercontrols angesprochen werden, möchte ich über die Checkbox bestimmen).
    Dummerweise habe ich keine Idee, wie ich dies anstellen kann.


    Ich hoffe ich habe mich verständlich ausgedrückt, falls nicht ein kleines Beispiel:
    Im struct gibt es einen string namens Farbe. Ich habe 5 Elemente dieses struct, welche in den Usercontrols dargestellt werden. Auf jedem UC gibt es ein Eingabefeld, wo ich die Farbe hinterlegen kann (ist nur ein Text). Tippe ich nun "BLAU" in das Textfeld, so soll auch in den anderen Eingabefeldern für die Farbe "BLAU" erscheinen.

    Gruß
    Swen

  • #2
    Habe die Frage nicht ganz verstanden sollen alle UserControls das selbe Object anzeigen oder jedes Usercontrol sein eigenes?
    Warum struct? Das ist fast immer die falsche Wahl in C#.

    Comment


    • #3
      die Usercontrols sollen alle unterschiedliche Objekte anzeigen, welche aber vom gleichen Objekttyp sind.

      Als Beispiel Objekttyp Motor, Properties sind Name , Leistung und Begrenzung. Ich zeige nun 3 UserControls an. Inhalt Nr 1 Elektromotor, 2 Dieselmotor und 3 Ottomotor. Für jeden Motor habe ich ein Eingabefeld für die Leistung und die Begrenzung.

      Das struct nicht die Lösung ist, weiß ich, eine Klasse wäre schlauer, aber das habe mit structs meine Programmierlaufbahn begonnen und mich noch nicht umorientiert (dafür mache ich zu selten etwas)

      Comment


      • #4
        Dann würde ich Dem UserControl ein Event verpassen das das UserControl feuert wenn sich die von ihm verwaltetet Datenklasse ändert. Die Form auf dem die UserControls liegen fängt den Events die sie dann an eine Methode der anderen UserControls weiterleitet. Die UserControls entscheiden dann anhand ihrer CheckBox in der Methode ob sie darauf reagieren oder es ignorieren.

        Comment


        • #5
          So in der Art hatte ich mir das vorgestellt,aber wie genau stelle ich das an?
          Ich vermute beim Eingabefeld müsste ich auf das OnKeyDown reagieren und eine Funktion des UserControls aufrufen, welche sagt, es wurde eben eine Taste betätigt. Das klingt noch recht einfach. Wie aber kann ich dem Form diese Info übergeben? Das weitereichen an die anderen UC vom Form aus sollte wieder einfach sein, aber in den UCs müsste ja dann irgendwie eine Funktion hinterlegt sein, die genau das Ereignis ausführt, welches ich im "Master" durchgeführt habe.

          Comment


          • #6
            Kommt auf die bisherigen Internas des UserControls an und wann du synchronisieren willst. Während der Eingabe oder erst beim Abschluss der Eingabe in ein Control? Ich hätte die Datenklasse per Databinding an die Controls im UserControl gebunden (geht nicht mit structs) und dann die Events der Datenklasse (die Datenklasse hätte ich so geschrieben das sie Change Events hat) benutzt um sie zu fangen und vom UserControl wieder zu veröffentlichen. Wie du es machst hängt davon ab wie du bisher vorgegangen bist.

            Ein anderes vorgehen wäre auch zum Beispiel das das UserControl einfach alle Datenklassen kennt. Wenn man die zum Beispiel in einer BindingList verwaltet und einfach alle UserControls das ListChanged Event der BindingList registrieren läßt bekommen die alle mit wenn sich eins der Objekte in der Liste ändern und können selbst entscheiden ob das für sie relevant ist oder nicht.

            Comment


            • #7
              Hab vielen Dank.

              Im Augenblick bin ich noch für alle Richtungen offen, da noch nicht allzu viel Funktionalität im UserControl steckt. Die Synchronisation soll während der Eingabe erfolgen. Das Databinding klingt interessant. Ich wusste gar nicht, dass man das auch für andere Dinge nutzen kann. Bei meinen bisherigen Versuchen habe ich sie lediglich für Datenbankverbindungen verwendet. Kannst Du irgendwelche Artikel empfehlen, wie man sie auch mit Klassen verwenden kann?

              Ich vermute die andere Idee geht in die Selbe Richtung? Die BindingList ist doch bestimmt eine Sammlung der Databindings vom UserControl?

              Comment


              • #8
                BindingList ist einfach ein Liste wie Array, List<T> etc. es bringt nur schon typische Events mit die feuern wenn sich die Objekte in ihr ändern. Das ist hilffreich beim DataBinding hat aber nicht direkt was damit zu tun.
                DataBinding geht immer mit Klassen. Wenn du das bisher nur mit DataTable, Dataset gemacht hast ging das weil die halt auch nur Klassen sind

                Unter dem Stichwort DataBinding wirst du unmengen im Netz finden. Was einem Anfänger hilft oder dir bei diesem konkreten Problem bin ich etwas überfragt.
                Wenn du es Probierst dann stell konkretere Fragen wenn du irgendwo hängst.

                Für den Anfang damit es überhaput funktionieren kann musst du aus deinem struct aber eine Klasse machen. Die Klasse muß seine Daten als Properties veröffentlichen nicht einfach Felder (sollte man eh nie tun). Und diese Klasse sollte das INotifyPropertyChanged Interface implementieren.

                Comment

                Working...
                X