Wohin mit dem Code..?



  • Bonafide schrieb:

    Verstehe nicht ganz, was du meinst,...

    Wundert mich, den im Gegensatz zu deinen bisherigen Post ist seine Beschreibung aussgekräftig, und verständlich geschrieben.

    1. Erzeuge beide Controls im Konstruktor oder dem Load-Event der übergeordneten Form, möglichst Invisible (oder blende sie nach dem Erzeugen aus).
    2. Bei einem Klick auf einen Button machst du
    a) das entsprechende Control sichtbar (und blendest das andere aus)
    b) rufst du eine Methode des Controls auf, die das von dir gewünschte durchführt.

    cu André



  • asc schrieb:

    Bonafide schrieb:

    Verstehe nicht ganz, was du meinst,...

    Wundert mich, den im Gegensatz zu deinen bisherigen Post ist seine Beschreibung aussgekräftig, und verständlich geschrieben.

    1. Erzeuge beide Controls im Konstruktor oder dem Load-Event der übergeordneten Form, möglichst Invisible (oder blende sie nach dem Erzeugen aus).
    2. Bei einem Klick auf einen Button machst du
    a) das entsprechende Control sichtbar (und blendest das andere aus)
    b) rufst du eine Methode des Controls auf, die das von dir gewünschte durchführt.

    cu André

    So schlimm waren ja meine Posts auch wieder nicht. 😃 😃

    Jetzt zum Thema, verstehe nicht wieso ich meine UserControls Invisible machen soll...?
    (Punkt 2 habe ich ja verstanden..!)
    Reicht es nicht einfach eine Methode in UserControl zu schreiben und die nur einmal auf zu rufen..?



  • Jetzt zum Thema, verstehe nicht wieso ich meine UserControls Invisible machen soll...?






  • Knuddlbaer schrieb:

    Jetzt zum Thema, verstehe nicht wieso ich meine UserControls Invisible machen soll...?




    Ja, aber reicht den hierfür nicht das:

    usercontrol-eins aform = new usercontrol-eins();
    Panel2.Controls.Add(aform);
    

    Das bei Button-eins.
    Bei Button-zwei, adde ich das zweite UserControl und entferne das erste.
    Bei Button-eins enferne ich natürlich noch das zweite UserControl.

    Ist das schlecht programmiert oder wieso meint Ihr alle ich soll die UserControls Invisible/Visible stellen..?



  • Weil du dann die Controls nicht jedesmal neuladen musst?



  • O.o schrieb:

    Weil du dann die Controls nicht jedesmal neuladen musst?

    Ja aber ich will die doch neuladen, weil wenn ich die immer wieder per button-click neu laden, kann ich doch mein Code in UserControl_Load schreiben und mein Problem wäre gelöst.

    So wie du es beschrieben hast mit einer Mehtode in UserControl habe ich das Problem, dass ich nicht weiss wo ich diese Methode aufrufen soll.

    Wenn ich aber es schaffe, dass er jedesmal das UserControl neu lädt, dann habe ich dieses Problem nicht.
    Doch Leider habe ich festgestellt, dass er beide UserControls nur am Anfang des progs lädt.

    Ich hoffe du hast mich verstanden und sorry wenn ich paar für dich einfache Sachen nicht verstehe, habe leider nicht so viel Ahnung von C#...!



  • public class UserControl1 : UserControl
    {
      public UserControl1()
      {
        InitializeComponent();
      }
    
      public void TuWas()
      {
        // ...
      }
    }
    
    public class UserControl2 : UserControl
    {
      public UserControl2()
      {
        InitializeComponent();
      }
    
      public void TuWas()
      {
        // ...
      }
    }
    
    public class Form1 : Form
    {
      private UserControl1 _userControl1 = new UserControl1();
      private UserControl2 _userControl2 = new UserControl2();
      public Form1()
      {
        InitializeComponent();
    
        _userControl1.Visible = false;
        _userControl2.Visible = false;
      }
    
      private void button1_Click(object sender, EventArgs e)
      {
        if(_userControl1.Visible)
          _userControl1.TuWas();
    
        _userControl1.Visible = true;
        _userControl2.Visible = false;
      }
    
      private void button2_Click(object sender, EventArgs e)
      {
        if(_userControl2.Visible)
          _userControl2.TuWas();
    
        _userControl1.Visible = false;
        _userControl2.Visible = true;
      }
    }
    

    Seh es als Starthilfe. Aber es bringt dir keinen Lerneffekt wenn wir dir hier Code posten, der dann zwar läuft, aber du nicht verstehst was er tut und warum.
    An den Fragen die du bisher gestellt hast merkt man deutlich, das dir noch Grundlagen fehlen, die du dir dringend erarbeiten solltest.
    Viele hier sehen es auch nicht unbedingt gern wenn man keine eigenen Bemühungen zeigt (Code postet) und keine konkrete Fragen zu Fehlern/Problemen stellt.

    PS: Den Code kann man natürlich an einigen Stellen noch optimieren, aber zum Verständnis ist es so wohl das Beste.



  • Bonafide schrieb:

    /Ja aber ich will die doch neuladen, weil wenn ich die immer wieder per button-click neu laden, kann ich doch mein Code in UserControl_Load schreiben und mein Problem wäre gelöst.

    Eine komplette Neuanlage eines Controls, nur weil man Daten oder anderes neu einlesen will, ist in der Regel nicht sinnvoll (Es reicht ein Aufruf einer aktualisierungsfunktion) und langsamer. Gut, es gibt meines erachtens noch eine bessere Alternative:

    Man erstellt die Elemente erst wenn sie einmal verwendet werden (erster Buttondruck).

    Meine C# Kenntnisse sind jetzt nicht auf den aktuellsten Stand, aber ich würde sowas vorziehen:

    <Event: Button1>
    if(control2 != null)
      control1.Visible = true;
    if(control1 == null)
      control1 = new Control1
    control1.Refresh();
    control1.Visible = true;
    

    Sprich: Falls das andere Control existiert, dieses ausblenden. Dann prüfen ob das Control, das zu diesem Button gehört existiert, wenn ja, neuanlegen. Anschließend (in jedem Fall, auch wenn es vorher existierte) aktualisieren, und dann (sofern nötig) sichtbar machen.

    Bonafide schrieb:

    So wie du es beschrieben hast mit einer Mehtode in UserControl habe ich das Problem, dass ich nicht weiss wo ich diese Methode aufrufen soll.

    An der Stelle, die für den Aufruf zuständig ist. In dem Fall erfolgt der Aufruf über den Button.

    Bonafide schrieb:

    Wenn ich aber es schaffe, dass er jedesmal das UserControl neu lädt, dann habe ich dieses Problem nicht.

    Das vielleicht nicht, aber: Unnötige Initialisierungsschritte die jedesmal bei einer Neuanlage anfallen, und nicht wirklich nötig sind.

    Bonafide schrieb:

    ...habe leider nicht so viel Ahnung von C#...!

    Dies betrifft auch alle anderen GUI-Frameworks...

    cu André



  • Danke euch für eure Antworten..!

    @O.o.
    Klar hat es kein Lerneffekt, wenn ich dein Code nur abschreibe, aber ich versuche ja immer den Code zu verstehen bevor ich ihn abschreibe..!

    Das, was ich eigentlich gebraucht habe, war die funktion in UserControl auf public zu setzten, damit ich von aussen zugreifen kann.
    Ist mir aber leider nicht aufgefallen.

    @asc
    Hast in allen Punkten ja recht, nur muss dir sagen, dass mir die Erfahrung fehlt.
    Und wenn ein Problem auftritt, versuche ich es nach meiner Logik zu lösen.
    Ich kann mir ja nicht denken, dass ein bestimmter Weg/Lösung schlechter ist als ein anderer. Dazu wie oben ja schon gesagt fehlt mir einfach die Erfahrung.
    Für mich, als Anfänger zählt ja in erster Linie das Problem zu lösen.
    Und die Theory bringt leider au nicht so viel, wenn man null Praxis-erfahrung hat.

    Danke für eure Zeit...Gute Nacht..!



  • Hilfreich ist es wenn man sich erst mit den Grundlagen beschäftigt und dann eine konkrete Applikation angeht. Usercontrols laden und speichern sind IMHO keine Aufgaben für einen Anfänger.


Anmelden zum Antworten