Binding Problem oder wo liegt der Hund begraben?

  • WPF

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Binding Problem oder wo liegt der Hund begraben?

    Hallo,
    Ich melde mich mal wieder nach längerer Zeit der Abwesenheit.
    ich habe ein kleines WPF Fenster gebastelt bestehend aus zwei TextBoxen und einem Button.
    Wenn man den Button klickt, soll der Inhalt der linken Textbox (der String) in gleich große Blöcke geteilt werden. Das Prinzip klappt in einem Konsolen Programm und ein kleines bisschen auch im WPF Programm.
    folgendes funktioniert einwandfrei:

    C#-Quellcode

    1. this.StringContent = Orginal.Substring(0,3);


    Jetzt wollte ich das in eine Schleife packen damit auch folgende Blöcke angezeigt werden und nicht nur der erste Block.
    dafür habe ich folgendes gemacht:

    C#-Quellcode

    1. int i;int j = 3;for (i = 0; i < (Orginal.Length -3 ); i = i +3){this. StringContent.Substring(i, j);}

    Orginal ist die Textbox mit dem ursprünglichen TextStringContent ist die Textbox welche das Ergebnis anzeigen soll.

    Quellcode

    1. Als Fehlermeldung bekomme ich folgendes:
    2. System.ArgumentOutOfRangeException: Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen.



    PS: Irgendwie funktioniert das mit der Formatierung sowie Copy Paste nicht so recht. Weiß jetzt nicht obs an meinem Browser (Microsoft Edge) liegt oder am Forum...
    Ok, noch hat's nix explizit mit WPF direkt zu tun, da allgemeines Programmierproblem, aber wurscht.

    Runshak schrieb:

    Das Prinzip klappt in einem Konsolen Programm und ein kleines bisschen auch im WPF Programm.
    Was heißt da "ein kleines bisschen"? Entweder es klappt oder eben nicht.

    Damit Deine Codezeilen funktionieren, muss "Orginal" längentechnisch immer ein Vielfaches von 3 sein. Ist dem so? Falsch. Ok, anders. Was ist bleistiftsweise Orginal?

    btw: Es heißt "Original", nicht "Orginal".

    ##########

    Ich kann das Problem mit normalem Text nicht nachvollziehen. Aber wenn die Fehlermeldung kommt, kannst Du Dir ja auch anzeigen lassen, welchen Wert gerade i hat. Damit wären wir aber wieder beim allgemeinen Thema Debuggen - aber richtig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Wie @VaporiZed schon schreibt, der Code selbst hat nichts mit WPF zu tun. Somit ist es im falschen Unterforum und falsch geflagt ist es auch, nämlich nicht "c#".
    Dein Code sieht ziemlich schräg aus und man kann nur erahnen was Du da vorhast.
    Setze einen Haltepunkt und gehe im Debug (mit F11) durch die Schleife. Ich vermute, dass .Substring(i, j) nicht funktioniert, weil j vermutlich irgendwann mal ausserhalb der Länge des Original-Strings liegt.
    Ist aber bloßes Glaskugellesen.

    Was machst Du eigentlich, wenn die Zeichenkette von vorn herein kleiner als 3 Zeichen lang ist, oder genau 3?
    Was machst Du eigentlich, wenn die Zeichenkette 5 Zeichen lang ist mit den Zeichen an Position 4 und 5?

    Dksksm schrieb:

    wenn die Zeichenkette von vorn herein kleiner als 3 Zeichen lang ist, oder genau 3
    dann springt die For-Schleife wegen der Abbruchbedingung i < Orginal.Length - 3 nicht an.

    Dksksm schrieb:

    wenn die Zeichenkette 5 Zeichen lang ist
    wird die Schleife nur 1x durchlaufen, mit i = 0 und Substring von 0 bis 2.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nun ja das kleine bisschen was funktioniert ist:

    Quellcode

    1. ​this.StringContent = Orginal.Substring(0, 3);
    Das macht genau was es soll...aber halt nur ein einziges mal...

    deswegen die Schleife...
    j ist immer 3 und damit es mit der Länge keine Probleme gibt, ist in der Schleife das Orginal.Length -3 ...

    Das ganze habe ich erst in einer Consolen-Anwendung ausprobiert.

    dort halt mit

    C#-Quellcode

    1. static void Main(string[] args)
    2. {
    3. string text;
    4. text = Console.ReadLine();
    5. int i;
    6. int j = 3;
    7. for (i = 0; i<(text.Length -3); i= i+3 )
    8. {
    9. Console.Write(text.Substring(i, j));
    10. Console.Write(" ");
    11. }
    12. Console.ReadLine();
    13. }


    das hat wunderbar geklappt.

    Dann habe ich das ganze in WPF übertragen wollen...

    C#-Quellcode

    C#-Quellcode

    1. for(i = 0; i < (Orginal.Length - 3); i = i + 3)
    2. {
    3. this.StringContent.Substring(0, 3);
    4. }


    Sobald das Programm in die Schleife springt, steigt es aus...mit der oben genannten Fehlermeldung...Vermutlich ist die Bedingung falsch mit Orginal.Length - 3 ...Aber ich hab keine Ahnung ob das so ist und wenn ja wie mach ichs richtig. Oder ist das Binding falsch?

    XML-Quellcode

    1. ​Text="{Binding StringContent, UpdateSourceTrigger=PropertyChanged}"


    das ist in der TextBox die Eigenschaft, welche das Binding hat...

    Ich steh grad wirklich vollkommen auf dem Schlauch...

    VaporiZed schrieb:

    Was ist bleistiftsweise Orginal?

    Aber Moment. Du verwendest im Schleifenkopf Orginal (immer noch falsch geschrieben), aber in der Schleife this.StringContent. Bist Du sicher, dass das den gleichen Wert hat? Wenn zur Laufzeit der Wert von this.StringContent nicht angezeigt wird: Weise einer Variablen den Wert von this.StringContent zu und schau beim Auftreten des Fehlers, welchen Wert die beiden haben. Warum würde es mich nicht wundern, wenn bei this.StringContent nicht das drinsteht, was Du denkst/erwartest?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    du hast recht...der StringContent in der Schleife ist immer leer...deswegen der Fehler ?(

    hab das nicht gesehen :cursing: danke...bastel mal ein wenig rum und poste dann das funktionierende Ergebnis
    Ups. :whistling: Da ging der pädagogische Effekt flöten. Sorry || War keine Absicht. Hab das nicht als TE-spezifische Frage erkannt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.