tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
1488
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    fletschge fletschge ist offline Rookie
    Registriert seit
    Jul 2005
    Beiträge
    5
    Hi
    Ja ich weiss, über Themen wie dieses gibt es tausende Beiträge, die haben mir jedoch nicht geholfen.
    Ich bin völliger C# (hab vorher mit VB6 geproggt und keine Ahnung von Objektorientierter Programmierung).
    Ich hab ne Hauptform, auf der eine ListView platziert ist.
    Per Button rufe ich eine zweite Form auf auf der ein Button ist.
    Wenn ich auf diesen Button auf der zweiten Form klicke, soll ein Eintrag in die Listview der ersten Form (geöffnet) geschrieben werden.
    Wie geht das? Die Controls kan nich ja leider nicht direkt ansprechen.

    Bitte noch eine kurze Erklärung warum
     

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Erstell einfach eine public Methode in der ersten Form die du AddListViewEntry(ListViewItem item) an die du ein fertiges ListViewItem übergibst.

    Du brauchst noch eine private Variable für die Form1 in der Form2 und den Konstruktor der zweiten Form änderst du einfach so:
    Code :
    1
    2
    3
    4
    5
    
    private Form1 form1 = null;
     
    public Form2(Form1 f1) {
      form1 = f1;
    }
    Nun kannst du per
    Code :
    1
    
    this.form1.AddListViewEntry(myListViewItem);
    ein Item an die ListView anfügen.
     

  3. #3
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Zitat Zitat von fletschge
    hab vorher mit VB6 geproggt und keine Ahnung von Objektorientierter Programmierung
    Dann machs doch gleich Objektorientiert und übergib das Interface des Form1 dem Form2 im Konstruktor.
    Danach kannst Du einfach auf alle im Interface definierten Methoden und Objekte zugreifen.

    MfG, cosmo
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  4. #4
    fletschge fletschge ist offline Rookie
    Registriert seit
    Jul 2005
    Beiträge
    5
    Danke für die schnellen Antworten!

    @ cosmochaosmaker

    wie gesagt, ich habe keine Ahnung davon

    Wie übergeb ich denn das Interface dem Konstruktor *n oobfrage*
    Geändert von fletschge (11.07.05 um 13:21 Uhr)
     

  5. #5
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Und was soll ihm das Interface bringen, mal davon abgesehen, dass es nur vom ContainerControl ein Interface (IContainerControl) gibt, die Form ist dann wieder eine Ableitung von ContainerControl und erweitert dieses.

    Davon abgesehen: Durch die Übergabe des Interfaces kann er nicht auf selbst erstellte Properties zugreifen. Er könnte höchstens über die Controls-Collection auf die einzelnen Controls zugreifen, was aber wiederum nicht sauber wäre.
     

  6. #6
    fletschge fletschge ist offline Rookie
    Registriert seit
    Jul 2005
    Beiträge
    5
    Danke Norbert =)

    Schon ein Stückchen weiter.

    Nur ist bei mir noch das Problem dass über mein Code nur funktioniert, wenn ich die Form als neue Instanz aufrufe (dort ist der Eintrag dann vorhanden). Jedoch ist meine Hauptofrm bereits geöffnet. Was mache ich falsch?

    Form1:

    Code :
    1
    2
    3
    4
    
    public void AddListViewEntry(string item)
    {
        ListView.Items.Add(item);
    }

    Form 2:

    Code :
    1
    2
    3
    4
    5
    6
    
    private void cmdSave_Click(object sender, EventArgs e)
    {
        frmMain frmTemp = new frmMain();
        frmTemp.Show();
        frmTemp.AddListViewEntry("TestEintrag");
            }
     

  7. #7
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Zitat Zitat von fletschge
    Was mache ich falsch?
    Du instanzierst ein völlig neues Form was demnach nicht die veränderten Werte hat.
    Sowieso wird es nach beenden des Events verworfen.
    Norbert meinte es aber so:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    class Form2{
        private Form1 form1 = null;
     
        public Form2(Form1 f1) {
            form1 = f1;
        }
        private void cmdSave_Click(object sender, EventArgs e) {
            form1.AddListViewEntry("TestEintrag");
        }
    }
    Zitat Zitat von Norbert Eder
    Durch die Übergabe des Interfaces kann er nicht auf selbst erstellte Properties zugreifen.
    Sorry Norbert, aber ich verstehe das nicht ganz.
    Warum klappt das dann bei mir tadellos?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    interface IMainForm{
        string StatusBarText{
            get
            set;
        }
    }
    class frmMainForm : Form, IMainForm{
        private StausBar sbrStatus;
     
        public string StatusBarText{ // selbsterstelltes Property
            get{ return sbrStatus.Text; }
            set{ sbrStatus.Text = value; }
        }
    }
    class frmSetStatus{
        private IMainForm MainForm;
        public frmSetStatus( IMainForm Form ){
            MainForm = Form;
        }
        private void SetStatus(){
            MainForm.StatusBarText = "Geht doch ;)";
        }
    }
    Klär mich doch bitte auf Norbert, wenn Du jetzt was anderes meinst.
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  8. #8
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Du musst die erste Form beim Aufruf der zweiten Form mitübergeben. Hab ich dir eh schon geschrieben wie das machen kannst.

    Aufrufen tust die zweite Form dann so:
    Code :
    1
    2
    
    Form2 form2 = new Form2(this);
    form2.Show();
     

  9. #9
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Zitat Zitat von cosmochaosmaker
    Klär mich doch bitte auf Norbert, wenn Du jetzt was anderes meinst.
    Ganz einfach, du hast dir selbst ein Interface gebaut. Du hast aber geschrieben, er soll das Interface der Form übergeben - da steht aber nirgends etwas von "selbst ein Interface erstellen". Und as konnte ich daher auch nicht wissen.

    Ein eigenes Interface für deine Form zu bauen ist übrigens ein Overhead, es reicht, wenn du eine Reference auf deine Form weitergibst (dann hast auch nur eine Instanz). Schlüsselwort -> ref
     

  10. #10
    fletschge fletschge ist offline Rookie
    Registriert seit
    Jul 2005
    Beiträge
    5
    cool thx Norbert!

    Sorry ich wusste schon dass du das geschrieben hast, erschien mir aber zu wenig wichtig *besserhörwasanderesagen*
     

  11. #11
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Zitat Zitat von Norbert Eder
    Ganz einfach, du hast dir selbst ein Interface gebaut. Du hast aber geschrieben, er soll das Interface der Form übergeben - da steht aber nirgends etwas von "selbst ein Interface erstellen". Und as konnte ich daher auch nicht wissen.
    Ohh, sorry fletschge. Hab mich erst falsch ausgedrückt.
    Zitat Zitat von Norbert Eder
    Ein eigenes Interface für deine Form zu bauen ist übrigens ein Overhead, es reicht, wenn du eine Reference auf deine Form weitergibst (dann hast auch nur eine Instanz). Schlüsselwort -> ref
    Warum ist es denn ein Overhead? Versteh ich nicht.
    Kannst Du mir das bitte nahebringen oder auf eine Lektüre dazu verweisen.
    Ich dächt ein Interface ist eine saubere Objektorientierte Lösung um auf Objekte/Methoden,
    innerhalb eines andres Objektes zugreifen zu können.
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  12. #12
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Sicher ist es eine saubere Variante - keine Frage. Meiner Meinung machen Interfaces aber hauptsächlich dann Sinn, wenn ich eine externe Schnittstelle bereitstellen will. Ich selbst weiß ja wie ich meine Klassen zu verwenden habe bzw. wie diese auszusehen haben. Andere wissen es nicht und müssen daher über das Interface darauf aufmerksam gemacht werden. Dies verhält sich natürlich auch so, wenn im Team gearbeitet wird, in dem jeder seinen abgeschlossenen Bereich hat und mit den Modulen der anderen zu arbeiten hat.

    Erstellst du ein Projekt alleine und auch noch ohne externe Schnittstellen (zB Plugins) machts wenig Sinn, sondern vergrößert einfach nur deinen persönlichen Overhead. So wars gemeint.
     

  13. #13
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Vielen dank für die Antwort Norbert!

    Jetzt verstehe ich wie Du das gemeint hast.
    Ich für mich finde mit Interfaces kann man bei großen Modularen Projekten gewisse Zugriffsbereiche
    einfach trennen und machen die Handhabung trotz Mehraufwand, wie ich nun weiss,
    für mich aber trotzdem überschaubarer,
    obwohl ich ausschließlich allein programmiere aber WebServices im Team verwirkliche.
    Denke aber auch wenns ein kleines Projekt ist, isses echt ein persönlicher Overhead.
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  14. #14
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Eine allgemeingültige Lösung hierfür gibt es nicht. Im Endeffekt kann man alles hinter einer "Designentscheidung" verstecken. Man muss selbst abwägen wann die Verwendung von Interfaces Sinn macht und wann nicht. Vieles ist auch Erfahrung.
     

Ähnliche Themen

  1. Listview Eintrag selektieren
    Von jleschi im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 28.01.08, 17:19
  2. Listview Eintrag selektieren
    Von jleschi im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 27.01.08, 14:38
  3. Listview Nächsten eintrag Markieren?
    Von Hackmaster im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 07.04.07, 21:32
  4. VB 2005 - ListView-Eintrag suchen
    Von codeman im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 09.08.06, 18:17
  5. inhalt einer form in eine andere form laden
    Von danielm im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 07.12.03, 11:21