[C#] String von Form2 an Form1 übergeben ?

  • Nabend,


    ich bastel grade wieder etwas & bekomme es, auch nach 2 Stunden googlen nicht hin, den Text aus der textbox von Form2 als neues Item in die Listbox von Form1 zu übergeben.


    Sprich ich habe die Variable "string text = textbox1.text;" und den Inhalt der variable möchte ich als neues Item in die Listbox der Form1 übergeben.


    Ich habe jedoch 0 Plan wie ich auf diese Variable zugreifen kann bzw den wert übergeben kann.

  • Oww… lern programmieren :P. Ist nicht böse gemeint, aber wie man Variablen an eine andere Klasse übergibt, gehört wirklich zu den Grundlagen.


    Allerdings kommt es natürlich darauf an, was du machen willst. Theoretisch könntest du einfach auf die Listbox der Form1 aus Form2 zugreifen, dafür müsste Form2 aber Form1 kennen (macht kein Sinn) und die ListBox müsste public sein (macht noch weniger Sinn).


    Ist Form2 vielleicht ein Dialog und das Item soll erst hinzugefügt werden, wenn der Dialog geschlossen wird? Dann könntest du in Form2 eine Eigenschaft erstellen:

    Code
    1. internal String deinText { get; set; }

    (in Hoffnung, dass das richtig ist, C# ist lange her)


    Oder leben die beiden Formulare nebeneinander? Dann wäre das schon komplizierter, wenn man es ordentlich machen will. Schlecht geht es natürlich immer einfach :P.


    Zu wissen, was du genau machen willst, wäre nB.


  • Ich weiß das ich Programmieren lernen muss, aber dies tut man ja bekanntlich teilweise durch "learning by doing" :).



    Nun, ich versuche es mal etwas genauer zu erklären.


    Ich klicke in meiner Form1 einen Button, welcher Form2 öffnet.
    In dieser zweiten Form gebe ich in die Textbox einen Text ein & bestätige dies mit Ok.
    Den string ,welchen ich aus dieser Textbox ausgelesen habe soll nun als neues Item in der Listbox von Form1 hinzugefügt werden.
    Mein einziges Problem ist, ganz einfach, dass ich den Inhalt einer String Variable von Form2 in die ListBox von Form1 schreiben möchte.


    Falls ich es jetzt immer noch nicht verständlich genug erklärt habe, könnte ich das Projekt auch hochladen.

  • Öhhm ...



    Ist klar, was ich meine? Du fügst letztendlich eine Eigenschaft "DeinText" zum zweiten Form hinzu, und greifst darauf aus dem ersten Form zu. Wichtig ist, dass du es als Dialog anzeigst, sonst rennt das erste Form einfach weiter.


    Ich übernehme keine Gewähr, dass das richtig ist, ich bin zu faul, das auszuprobieren.

  • Ich hab ja selber nicht viel Ahnung davon, aber kann man nicht im Konstruktor von Form2 einen Verweis auf den String (oder gleich ein ganzes Objekt) übergeben (also mit <ref>)? Pointerübergabe geht ja in C# nur bedingt also wäre das die einzige Möglichkeit, die ich auf die schnelle gefunden hätte.
    Notwendig ist in diesem Fall ja auch, dass ich Form2 in Form1 erzeuge.

    Du möchtest mich mal treffen? Dann sag hallo und besuche mich an der FAU in Erlangen.

  • Ich hab ja selber nicht viel Ahnung davon, aber kann man nicht im Konstruktor von Form2 einen Verweis auf den String (oder gleich ein ganzes Objekt) übergeben (also mit <ref>)? Pointerübergabe geht ja in C# nur bedingt also wäre das die einzige Möglichkeit, die ich auf die schnelle gefunden hätte.
    Notwendig ist in diesem Fall ja auch, dass ich Form2 in Form1 erzeuge.

    Eine Eigenschaft wäre definitiv die richtige Wahl, Objektreferenzen sind immer so eine Sache in C#, würde ich eigentlich nicht verwenden. Man könnte den Wert noch als Rückgabeparameter in einer eigenen Dialogsfunktion einbauen, aber im Normalfall nimmt man bei Dialogen einfach eine Eigenschaft. (Unter Umständen ReadOnly, außerdem sollte man eventuell eine Exception werfen, wenn das Ding NULL ist und Form1 es abfragen will.)


    ~Sturmvogel


    Let the old ways live and prosper in the hearts of our young


  • So, das Problem hat sich mittlerweile durch Loopers hilfe gelöst.


    Aktuell habe ich jedoch noch ein Problem.


    Ich habe einen Array in dem viele Namen enthalten sind.
    Wenn ich nun in der ListBox einen dieser Namen auswähle soll er den Array via Array.BinarySearch durchgehen und mir den Index -1 ausgeben.
    Jedoch gibt mir dieser BinarySearch negative werte an, obwohl die Namen definitiv un 100%ig im Array vorhanden sind.
    Hier mein code:


  • Was willst du denn genau tun(Der Code sieht sehr unschlüssig aus...)
    Soll der string 1:1 so im Array vorkommen? Der Schnittstelle IEnumerable bietet dafür nämlich einige nette Suchfunktionen an(eine Liste ist in .net zum Beispiel ein IEnumerable):


    Das ganze ohne Gewähr, ich weiß auch nicht was genau du eigentlich tun willst... Btw. würde ich dir raten nicht einfach Code von irgendwo zu kopieren, falls du das getan hast, du wirst es letztlich selbst nicht verstehen und kannst keine Fehler mehr lösen und lernst auch nichts dabei. Für das Codesegment oben musst du aus deinem Array eine Liste zaubern(toList gibts afaik für alle Arrays) und mit deinem Index klarkommen, solltest du da noch irgendwelche arithmetischen Operationen vornehmen wollen. indexOf gibt dir einfach den ersten Fund zurück, der Index ist dabei nullbasierend.


    ~Sturmvogel


    Let the old ways live and prosper in the hearts of our young


  • Was willst du denn genau tun(Der Code sieht sehr unschlüssig aus...)
    Soll der string 1:1 so im Array vorkommen? Der Schnittstelle IEnumerable bietet dafür nämlich einige nette Suchfunktionen an(eine Liste ist in .net zum Beispiel ein IEnumerable):


    Das ganze ohne Gewähr, ich weiß auch nicht was genau du eigentlich tun willst... Btw. würde ich dir raten nicht einfach Code von irgendwo zu kopieren, falls du das getan hast, du wirst es letztlich selbst nicht verstehen und kannst keine Fehler mehr lösen und lernst auch nichts dabei. Für das Codesegment oben musst du aus deinem Array eine Liste zaubern(toList gibts afaik für alle Arrays) und mit deinem Index klarkommen, solltest du da noch irgendwelche arithmetischen Operationen vornehmen wollen. indexOf gibt dir einfach den ersten Fund zurück, der Index ist dabei nullbasierend.


    ~Sturmvogel


    Okay, ich versuchs mal zu verdeutlichen.
    Ich habe einen Array von folgendem aufbau {Name1,Pfad1,Name2,Pfad2,Name3,Pfad3, ...}
    Aus diesem Array wurden alle Namen in die Listbox als neues Item hinzugefügt.
    Nun möchte ich durch klicken des Items im Array den passenden Pfad dazu erhalten, um die Dazugehörigen Dateien zu finden.


    Dies wollte ich so realisieren, dass Ich im Array den namen des ausgewälten Items der Listbox suche, dann +1 Rechne und so den passenden Index des Pfades im Array durch Array.BinarySearch finde.
    Weshalb auch immer, kann er diese Namen jedoch nicht im Array finden, obwohl sie definitiv vorhanden sind.


    Der Code bzw. nur das BinarySearch ist aus einem Forum abgeleitet, ansonsten alles selbst erarbeitet oder wie man es nennen mag.

  • In C# gibt es "Dictionaries", das sind prinzipiell Hashmaps, die einem bestimmten Wert einen anderen zuweisen, ein nicht allzu abstraktes Beispiel: Jede DVD bekommt einen Platz im Regal. Ein kleines Beispiel für Dictionaries:


    Code
    1. Dictionary<string, string> myDictionary = new Dictionary<string, string>() //Erzeugt ein Dictionary von string nach string(also deine Namen -> deine Pfade)
    2. myDictionary.Add("The Dark Knight", "Regal 7") //Aus meinem Beispiel von oben
    3. string s = myDictionary("The Dark Knight"); // s=="Regal 7"


    Mit Suchfunktionen musst du dich dann nicht rumschlagen, weil die Implementation schon integriert ist. (Sofern ich das richtig verstanden habe jetzt...)


    ~Sturmvogel


    Let the old ways live and prosper in the hearts of our young


  • In C# gibt es "Dictionaries", das sind prinzipiell Hashmaps, die einem bestimmten Wert einen anderen zuweisen, ein nicht allzu abstraktes Beispiel: Jede DVD bekommt einen Platz im Regal. Ein kleines Beispiel für Dictionaries:


    Code
    1. Dictionary<string, string> myDictionary = new Dictionary<string, string>() //Erzeugt ein Dictionary von string nach string(also deine Namen -> deine Pfade)
    2. myDictionary.Add("The Dark Knight", "Regal 7") //Aus meinem Beispiel von oben
    3. string s = myDictionary("The Dark Knight"); // s=="Regal 7"


    Mit Suchfunktionen musst du dich dann nicht rumschlagen, weil die Implementation schon integriert ist. (Sofern ich das richtig verstanden habe jetzt...)


    ~Sturmvogel


    Das Problem hierbei ist, das mir die Anzahl der benötigten Dictonary nicht bekannt ist, da man den Array so sehr erweitern kann, wie man will, man kann so viele Einträge in die Liste hinzufügen wie man mag, sprich ich müsste ein "ArrayDictionary" o.ä erstellen.
    Oder hab ich grade etwas nicht ganz verstanden ?

  • Ein Dictionary, das nur einen Wert akzeptieren würde, wäre doch vollkommen sinnlos, das wären nur zwei Variablen Oo Ein Dictionary ist ein dynamisches Array, genau wie eine Liste, nur eben in Hashmap-Form.


    ~Sturmvogel


    Hehe, hast recht, ich hab gar nicht nachgedacht gerade.^^
    Vielen dank, du hast mir ziemlich viel Rauferei erspart, auch wenn ich leider den Fehler in meinem bisherigen Code nicht finden konnte.^^

  • Erstmal Hallo,


    ist zwar schon ne weile her wo ihr dieses Thema behandelt habt, hätte aber eine Frage dazu, wie könnte ich dann die Dictionary an Form1 übergeben? Diesen Fall habe ich nämlich gerade?
    Würde mich freuen wenn mir einer helfen könnte.


    Gruß Mirko