ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
1488
1488
EMPFEHLEN
-
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
-
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:
Nun kannst du perCode :1 2 3 4 5
private Form1 form1 = null; public Form2(Form1 f1) { form1 = f1; }
ein Item an die ListView anfügen.Code :1
this.form1.AddListViewEntry(myListViewItem);
-
Dann machs doch gleich Objektorientiert und übergib das Interface des Form1 dem Form2 im Konstruktor.
Zitat von fletschge
Danach kannst Du einfach auf alle im Interface definierten Methoden und Objekte zugreifen.
MfG, cosmoMfG,
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...
-
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)
-
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.
-
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"); }
-
Du instanzierst ein völlig neues Form was demnach nicht die veränderten Werte hat.
Zitat von fletschge
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"); } }Sorry Norbert, aber ich verstehe das nicht ganz.
Zitat von Norbert Eder
Warum klappt das dann bei mir tadellos?Klär mich doch bitte auf Norbert, wenn Du jetzt was anderes meinst.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 ;)"; } }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...
-
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();
-
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.
Zitat von cosmochaosmaker
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
-
cool thx Norbert!
Sorry ich wusste schon dass du das geschrieben hast, erschien mir aber zu wenig wichtig *besserhörwasanderesagen*
-
Ohh, sorry fletschge. Hab mich erst falsch ausgedrückt.
Zitat von Norbert Eder
Warum ist es denn ein Overhead? Versteh ich nicht.
Zitat von Norbert Eder
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...
-
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.
-
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...
-
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
-
Listview Eintrag selektieren
Von jleschi im Forum C/C++Antworten: 3Letzter Beitrag: 28.01.08, 17:19 -
Listview Eintrag selektieren
Von jleschi im Forum C/C++Antworten: 0Letzter Beitrag: 27.01.08, 14:38 -
Listview Nächsten eintrag Markieren?
Von Hackmaster im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 07.04.07, 21:32 -
VB 2005 - ListView-Eintrag suchen
Von codeman im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 09.08.06, 18:17 -
inhalt einer form in eine andere form laden
Von danielm im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 07.12.03, 11:21





Zitieren
Login





