Autor Beitrag
okrim
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win 7
C# (VS 2010 Express)
BeitragVerfasst: Fr 14.02.14 17:23 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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):
ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
okrim Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win 7
C# (VS 2010 Express)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

ausblenden C#-Quelltext
1:
2:
3:
4:
  public class StringEventArgs : EventArgs
  {
    public string Data { get; set; }
  }


Und ändere die Quelltexte wie folgt:
Form2:
ausblenden 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(thisnew StringEventArgs { Data = textBox1.Text });
    }


Form1:
ausblenden C#-Quelltext
1:
2:
3:
4:
      var f2 = new Form2();

      f2.AddItem += (s, arg) => { listBox1.Items.Add(arg.Data); };
      f2.Show();

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
okrim Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win 7
C# (VS 2010 Express)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 14.02.14 20:04 
ausblenden C#-Quelltext
1:
deineLiebeCombobox.Sorted = true;					
okrim Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win 7
C# (VS 2010 Express)
BeitragVerfasst: 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 14.02.14 21:50 
Hallo,

Wenn du per Code sortierst könntest du es einfach so machen:
ausblenden C#-Quelltext
1:
2:
3:
4:
  var f2 = new Form2();

      f2.AddItem += (s, arg) => { listBox1.Items.Add(arg.Data); SortiereText(); };
      f2.Show();

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
    private static  SortiereItems()
    {
      // Items aus Combobox ziehen und als string casten; leere elemente löschen.
      List<string> lines = listBox1.Items.Cast<string>().Where(l => !String.IsNullOrEmpty(l)).ToList();
      
      lines.Sort((a, b) => a.CompareTo(b));      // string alphabetisch sortieren

      listBox1.Items.Clear();          // Items löschen
      listBox1.Items.AddRange(lines.ToArray());  // sortierte Items einfügen
    }


es sollte auch so gehen, aber dann musst du die Sorted-Eigenschaft auf true setzten (hab ich aber nicht probiert):
ausblenden C#-Quelltext
1:
2:
3:
4:
    private void SortiereItems()
    {
      listBox1.Update();
    }

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 14.02.14 22:09 
Stimmt eigentlich :autsch: Aber ich schieß mir gerne von hinten durch den Rücken in den Fuß :D

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
okrim Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win 7
C# (VS 2010 Express)
BeitragVerfasst: 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