Entwickler-Ecke
WinForms - Aus Form2, Eintrag in die Liste der Combobox in Form1
okrim - Fr 14.02.14 17:23
Titel: Aus Form2, Eintrag in die Liste der Combobox in Form1
Hallo an alle,
hab mal wieder ne Frage, wie kann ich den Text aus einer textBox in Form2 beim Klick auf ein Button in die Liste der comboBox in Form1 einfügen?
Würde mich freuen wenn mir einer von euch helfen könnte!
Vielen Dank im Voraus.
Gruß Mirko
Christian S. - Fr 14.02.14 17:36
Hallo!
Also wenn das, während Form2 offen ist, mehrmals passieren kann (Form2 also nicht mit Klick auf den Button schließt), würde ich das über ein Ereignis lösen, welches die erste Form "abonniert".
In der Form2:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public event EventHandler<string> AddItem;
private void button1_Click(object sender, EventArgs e) { var tmp = AddItem; if (tmp != null) tmp.Invoke(this, textBox1.Text); } |
In der Form1 (beim Erstellen von Form2):
C#-Quelltext
1: 2: 3: 4:
| var f2 = new Form2();
f2.AddItem += (s, item) => { listBox1.Items.Add(item); }; f2.Show(); |
Das Event ist, wenn ich mich recht entsinne, nicht ganz nach den Richtlinien, weil der zweite Parameter eigentlich von
EventArgs erben muss, aber ich kann mich auch irren :gruebel: Als Beispiel sollte es aber auf jeden Fall reichen.
Wird erst hinzugefügt, wenn Form2 geschlossen wird, dann reicht es, in Form2 eine Eigenschaft anzulegen, die beim Button-Click gefüllt wird und die man nach dem Schließen in Form1 ausliest.
Grüße
Christian
okrim - Fr 14.02.14 18:06
Hallo Christian,
danke für deine Schnelle Antwort, nur leider bekomme ich die ganze Zeit den Fehler
„Der Typ "string" kann nicht als Typparameter "TEventArgs" im generischen Typ oder in der generischen Methode "System.EventHandler<TEventArgs>" verwendet werden. Es ist keine implizite Verweiskonvertierung von "string" in "System.EventArgs" vorhanden“
Was mach ich falsch?
Sorry wenn ich mich bisschen blöd anstelle, aber ich habe erst mit dem Programmieren angefangen und versuch mich gerade mit einem Programm für die Arbeit.
learning by doing :D
Gruß Mirko
Christian S. - Fr 14.02.14 18:17
Hm, dann scheint bei Dir die Bedingung mit den EventArgs, die ich oben erwähnte, erzwungen zu werden. Dann führe mal in Deinem Projekt folgende Klasse ein:
C#-Quelltext
1: 2: 3: 4:
| public class StringEventArgs : EventArgs { public string Data { get; set; } } |
Und ändere die Quelltexte wie folgt:
Form2:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public event EventHandler<StringEventArgs> AddItem;
private void button1_Click(object sender, EventArgs e) { var tmp = AddItem; if (tmp != null) tmp.Invoke(this, new StringEventArgs { Data = textBox1.Text }); } |
Form1:
C#-Quelltext
1: 2: 3: 4:
| var f2 = new Form2();
f2.AddItem += (s, arg) => { listBox1.Items.Add(arg.Data); }; f2.Show(); |
okrim - Fr 14.02.14 19:23
Super jetzt klappt es, ich freu mich so!!!
Geht es eigentlich auch das die Einträge in der comboBox Alphabetisch sortiert sind?
Gruß Mirko
Ralf Jansen - Fr 14.02.14 20:04
C#-Quelltext
1:
| deineLiebeCombobox.Sorted = true; |
okrim - Fr 14.02.14 20:58
Hallo Ralf,
danke für die Antwort, das ich sie so Sortieren kann das wüsste ich dank Google, nur weiss ich nicht wie ich das in dem Beispiel hier mit einbauen kann, so das wenn ich form2 schliese sollte die comboBox in form1 gleich Sortiert sein.
Oder geht das nur das es erst Sortiert wenn ich in die comboBox klicke?
Gruß Mirko
C# - Fr 14.02.14 21:50
Hallo,
Wenn du per Code sortierst könntest du es einfach so machen:
C#-Quelltext
1: 2: 3: 4:
| var f2 = new Form2();
f2.AddItem += (s, arg) => { listBox1.Items.Add(arg.Data); SortiereText(); }; f2.Show(); |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private static SortiereItems() { List<string> lines = listBox1.Items.Cast<string>().Where(l => !String.IsNullOrEmpty(l)).ToList(); lines.Sort((a, b) => a.CompareTo(b)); listBox1.Items.Clear(); listBox1.Items.AddRange(lines.ToArray()); } |
es sollte auch so gehen, aber dann musst du die Sorted-Eigenschaft auf true setzten (hab ich aber nicht probiert):
C#-Quelltext
1: 2: 3: 4:
| private void SortiereItems() { listBox1.Update(); } |
Ralf Jansen - Fr 14.02.14 22:02
Setzt Sorted im Designer einfach auf true. Die Combox wird dann schon die Liste sortiert halten so wie du Elemente hinzufügst.
C# - Fr 14.02.14 22:09
Stimmt eigentlich :autsch: Aber ich schieß mir gerne von hinten durch den Rücken in den Fuß :D
okrim - Sa 15.02.14 13:48
Ich danke euch recht Herzlich, ich freu mich immer wieder wenn ich Hilfe von euch bekomme.
Danke, danke, danke … :beer:
Gruß Mirko
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!