Get und Set einer RTB (xceed) bei Änderung auslösen?

  • WPF

Es gibt 55 Antworten in diesem Thema. Der letzte Beitrag () ist von Translating-IT.

    Nofear23m schrieb:

    Ich hoffe das war jetzt nicht zu hart von mir,


    Anscheinend wohl doch. Schade, ich dachte du verstehst es richtig und bekommst es nicht in den falschen Hals. Naja, du solltest auf jeden Fall mit den letzen Codeschnipseln zu deinem Ziel kommen.
    Sei nur (wenn dies der Fall ist) so gut und markiere den Thread als erledigt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    Sorry, bin die letzten 2 Wochen mal wieder nicht dazu gekommen, mich mit der Programmierung zu beschäftigen.

    Ich habe nicht versucht, den Spieß umzudrehen, aber ich bin mal davon ausgegangen, dass Du das nicht gesehen hast, da Du das Problem mit keinem Wort erwähnt hast, sondern nur das andere Problemchen gelöst hast, wonach ich aber nicht gefragt hatte. Ein weiterer Hinweis hätte ja evtl. auch gereicht.

    Quellcode

    1. Ich sehe hier null lernwillen … , aber wenn jemand zu faul ist etwas nachzulesen oder zu googeln hört sich der spaß auf.


    Mir keinen Lernwillen, Faulheit zum Lesen und Googlen vorzuwerfen, kann nur wer, der mich nicht kennt ‑ wofür ich Dir keinen Vorwurf machen kann. Ich habe zu diesem Thema derzeit noch ca. 30 Tabs von den paar Hundert Seiten offen, die ich mir bisher angeschaut habe. Ich hatte hier im Forum schon mehrfach darauf hingewiesen, dass ich mit Theorie nichts anfangen kann, was für viele aber leider immer wieder als Ausrede hingestellt wird. Das heißt aber nicht, dass ich nicht lernen will, nur kann ich nicht über Theorie lernen. Ich gehöre zu den 1 bis 2 Prozent der Menschheit, denen Theorie leider auf ewig versagt bleibt. Das liegt aber nicht daran, dass wir nicht daran interessiert wären, sondern schlicht und einfach, weil wir sie nicht verstehen, egal wie sehr wir uns anstrengen. Andererseits bedeutet das aber auch nicht, dass wir nichts lernen können oder wollen. Bei mir ist es so, dass ich Kopfschmerzen bekommen, wenn ich Theorie lese und sich eine Art Grauschleier im Kopf ausbreitet. Ist für viele nicht nachvollziehbar, aber das ist die beste Beschreibung, wie sich das anfühlt. Die einzige Möglichkeit für mich und all jene mit diesem "Problem" sind viele Beispiele, damit wir Muster erkennen. Anfangs sitz ich zwar oft sehr stark auf der Leitung, dafür bin ich dann später aber gegenüber jenen auf der Überholspur, die über Theorie gelernt habe. Ich habe schon oft Probleme lösen können, wo Professoren und andere hochrangige Fachleute gemeint haben, dass das nicht möglich ist. Darunter auch ein Projekt der abteilungsübergreifenden Abteilung "Künstliche Intelligenz" an der Uni Wien, woran schon 8 hochrangige Projektgruppen mit zig Tausenden Euro gescheitert waren, da habe ich nach wenigen Stunde eine Lösung gefunden und dazu weitere Lösungsansätze für andere Projekte.

    Daher sind auch die Microsoft-Seite so scheiße für mich. Zumindest die meisten, bei einigen gibt es ja schon Beispiele, und bei noch weniger davon sogar in VB statt nur C#. Die oben genannte Seite zählt leider nicht dazu und die hatte ich in den letzten Wochen schon mehrfach offen. Ich habe Wochenlang nach Beispielen gesucht, aber keine gefunden, auch nicht in Deinem Lernbeitrag zu WPF, dort ist auch keine Theorie dazu. Oder habe ich die übersehen?

    Wenn ich so lernfaul wäre, hätte ich auch keine 9 Sprachen und auch andere Themenbereiche erlernen und zu meinem Beruf machen können, und das obwohl man dafür eigentlich die Grammatik (Theorie) kennen muss, um gut zu sein. Ich kann die Sprachen zu 99% fehlerfrei anwenden, und das trotz dessen, dass ich keine Theorie kann. Es geht einfach übers Gefühl, was auch viele Lehrer und Professoren verblüfft hat. Ich kann alles richtig anwenden, selbst die ärgsten Ausnahmen, aber ich kann nicht erklären, warum es so ist. Dazu noch ein Zitat von meiner Japanischlehrerin, nachdem ich einen Abend mit einem Austauschstudenten unterwegs war: "Dein Japanisch ist viel besser und flüssiger geworden. Die paar Stunden mit Shigeto haben Dir sehr viel mehr gebracht, als die 3 Jahre in meinem Kurs." Und sie hatte viele Beispiele mit uns durchgenommen, nicht nur Theorie.

    Glaubs mir, ich bewundere all jene, die Theorie verstehen und lesen können, und bin auch etwas neidisch auf sie (genauso wie mich andere für meine intuitive Begabung bei Sprachen bewundern und neidisch darauf sind).

    Und selbst, wenn ich mal poste, dass ich nicht vorankomme, bedeutet das nicht, dass ich mich zurücklehne und auf die Antwort warte. Selbst dann suche ich noch weiter nach einer Lösung bzw. rattert es in meinem Hinterkopf weiter. Komischerweise fallen mir oft selbst Lösungen erst ein, nachdem ich eine Frage in einem Forum formuliert habe. Für Letzteres muss ich sich aber schon ein Muster in meinem Kopf gebildet haben. Das ist hier noch nicht der Fall.

    Quellcode

    1. Ich habe dir wirklich schon SEHR VIEL vorgekaut.


    Mir ist auch klar, dass Du schon sehr viel vorgekaut hast, und das hat mir auch schon sehr viel geholfen, Muster zu erkennen, aber noch nicht dort wo es bei diesem Problem darauf ankommt.

    Dass ich nach bestimmten Objekten suchen muss, ist mir klar, nur weiß ich noch nicht, wie ich diese laut Code auseinanderhalten/unterscheiden kann. Zu InlineUIContainern habe ich noch nicht sehr viel hilfreiches gefunden, zu inlines hingegen sehr viel, aber die waren ja auch in Deinem Beispiel schon vorhanden.

    Ich werde mir in den nächsten Tagen das Beispiel nochmal anschauen, ob ich irgendwas übersehen habe und melde mich dann. Evtl. hilft ja auch der letzte Codeschnippsel weiter.

    Quellcode

    1. Ich hoffe das war jetzt nicht zu hart von mir, …


    Keine Sorge.

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Hallo

    Ich verstehe dein Problem, soll jetzt nicht bedeuten das ich es nachvollziehen kann - wie auch, ich bin nicht bei den 2% - aber ich denke ich kann verstehen was du meinst. Aber du musst mich auch verstehen. Wie gesagt, es war nicht Böse gemeint (denke du hast es auch nicht so aufgefasst) aber ich musste das rauslassen da wir uns bei diesem aktuellen Problem echt sehr langsam fortbewegen.

    Aber Back to topic:
    Das Codeschnipsel sollte dir auf jeden Fall weiterhelfen. Hier kannst du sehen das hier in der Schleife zwischen den verschiednen Objekten unterschieden wird.
    Tipp: Setze am Anfang der Schleife einen Haltepunkt in VisualStudio.

    Wenn die Ausführung stehen bleibt kannst du mit F10 Schritt für Schritt im code weitergehen. Wenn du während er in einem Haltepunkt steht mit der Maus über eine variable fährst (hover) bekommst du Infos über diese. Das ist SEHR Hilfeich um auch zu sehen was sich dahinter befindet und wie dessen Wert ist.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    Bin heute erst dazu gekommen mir das anzuschauen.

    Der Tipp mit der Maus über die Variablen zu fahren, um den Inhalt oder den Wert anzuzeigen, war mir neu. Hab zuvor nie wirklich mit Haltepunkten gearbeitet. Ich hab mir die Liste angeschaut, aber nichts neues darin entdeckt. Ich weiß, dass ich Run und InlineUIContainer in der Liste habe. Das ändert aber nichts daran, dass ich nicht weiß, wie ich die depperten InlineUIContainer filtern kann bevor der Fehler auftritt. Der Fehler wird ja schon in der Zeile:

    VB.NET-Quellcode

    1. For Each inline As Run In b.Inlines.ToList


    ausgegeben.
    Mir ist klar, dass es daran liegt, dass wir "inline" als Run definieren, aber ich weiß nicht, wie ich es definieren kann, damit ich sowohl Run als auch InlineUIContainer in der For-each-Schleife haben kann und erst später prüfen kann, welches der beiden vorliegt. An sich war das von Anfang an das Problem, nicht, dass ich nicht wusste, dass Run und InlineUIContainer abgefragt/unterschieden werden müssen, falls es so rübergekommen war.

    Edit: oder einfach gar nicht definieren … War glaub ich so sehr davon ausgegangen, dass es definiert sein muss, dass ich ständig das einfachste übersehen habe. Stimmt das so:

    VB.NET-Quellcode

    1. For Each b As Paragraph In doc.Blocks.ToList
    2. For Each inline In b.Inlines.ToList
    3. If TryCast(inline, Run) IsNot Nothing Then
    4. Dim insertText As String = DirectCast(inline, Run).Text
    5. Select Case DirectCast(inline.Tag, RtbTag)
    6. Case RtbTag.TP
    7. insertText = "{tp}" & insertText & "{\tp}"
    8. Case RtbTag.TS
    9. insertText = "{ts}" & insertText & "{\ts}"
    10. End Select
    11. text += insertText
    12. End If
    13. If TryCast(inline, InlineUIContainer) IsNot Nothing Then
    14. Dim insertText As String = DirectCast(inline, InlineUIContainer).ToString
    15. text += insertText
    16. End If
    17. Next
    18. Next


    Das Ergebnis scheint zumindest zu passen.

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Translating-IT“ ()

    Hallo

    Ich habe deinen Code im Edit jetzt nicht probiert. Was mich wurdert ist das du nicht den code aus #Post40 übernommen hast, denn dort habe ich dir das schon korrigiert gehabt. Der geht nämlich nur die Inlines durch (welche du ja brauchst).
    Hast du den übersehen??

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    Nein, hatte ich nicht übersehen, auch versucht, aber scheinbar falsch "abgeschrieben". Hatte nämlich nicht funktioniert, als ich versucht habe als "as inline" zu einzugeben. Ich glaube aber mich zu erinnern, dass VB auf "as Inlines" ausgebessert hat. Und ich habe mir dabei nix gedacht.

    Jetzt nochmal mit "as Inline" (ohne Autokorrektur) versucht: Ja, damit funktioniert es auch. Ist dann auch genauer, was auch mögliche andere Fehler ausmerzt.

    Das Tagging (.Tag) muss ich wohl sein lassen, da ich damit sonst überschüssigen Code in der finalen Version habe, den ich dann wieder mühsam entfernen muss. Funktioniert aber für meine Usecase auch ohne, wie ich gestern gesehen habe.
    Das Tagging werde ich aber sicher später auch woanders mal brauchen können.

    Ich habe noch ein paar interessante Fehler (unter anderem einen Stapelüberlauf), die ich mir nicht erklären kann, aber dafür nehmen wir einen anderen Thread. Der hier ist nun endlich abgeschlossen.

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Translating-IT schrieb:

    die ich mir nicht erklären kann, aber dafür nehmen wir einen anderen Thread

    Bitte nur einen neuen Thread aufmachen wenn dieser Fehler NICHTS mit der RTB und dem Formatter zu tun hat, ansonsten gerne hier mit rein.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nein, haben mit checkboxes und Suchfeld zu tun. Schau ich mir aber noch mal an, eventuell finde ich ja die Ursache dafür.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    OK, passt. Viel Glück derweilen und ansonsten meldest dich einfach.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Nofear23m
    Hallo Sascha,

    muss den Thread doch noch ein paar Mal bemühen, auch wenn die ursprüngliche Frage schon beantwortet ist, aber es hat ja noch mit RTB zu tun.

    Irgendwo sitz ich seit mehreren Stunden grad voll auf der Leitung. Beim Select Case sind die tp Strings (For each tp in textParts), wieso kann ich diese im Case nicht als String abrufen/anzeigen lassen, aber mit "new Run(tp)" in den Run einfügen? Wenn tp anzeigen lassen will, wird er als "" angezeigt, obwohl ein Wert vorhanden sein müsste:

    VB.NET-Quellcode

    1. MessageBox.Show(tp)


    Variable befüllen geht auch nicht:

    VB.NET-Quellcode

    1. tp2 = tp


    Was check ich hier gerade nicht bzw. wie kann ich diese Strings in eine andere Variable übernehmen?

    Ich wollte den Wert von bestimmten tps nämlich in einer anderen Variable zwischenspeichern, aber irgendwie will das nicht klappen.

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Hallo Pascal

    Translating-IT schrieb:

    obwohl ein Wert vorhanden sein müsste

    Müsste ist eher schlecht. Ist ein Wert enthalten oder nicht?

    Setze einen Haltepunkt in der Zeile. Nun Debuggen, der Debugger wird dort reinlaufen und den Code anhalten -> nun mit der Maus über die Variable fahren und der Wert wird dir angezeigt, genau wie der Wert und der Typ der anderen Variablen. So kannst du dir alle Werte ansehen. Erst wenn wir sicher sind das ein Wert (der gewünschte Wert) in der Variable gespeichert ist können wir weitermachen, bis dahin ist alles spekulation.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    Ja, die lieben Haltepunkte. Die vergesse ich immer wieder. Wird mir wohl leider noch ne Weile so gehen.

    Habe aber dann selbst daran gedacht, als ich schon im Bett lag …

    Hm, komischerweise ist auf einmal ein "" dort wo vorher keiner war, aber jetzt klappt es.

    MIr ist dann noch eingefallen, dass wir hier auch über das Sperren von den ucITs-Platzhaltern gesprochen hatten. Nach welchem Befehl/welcher "Option" sollte ich da wegen Beispielen suchen, oder ist das um einiges komplizierter?

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Translating-IT schrieb:

    dass wir hier auch über das Sperren von den ucITs-Platzhaltern gesprochen hatten

    Sorry, kann ich mich gar nicht erinnern. Aber vieleicht hab ichs ja überlesen. =O

    Wie genau meinst du das. Das man die TP oder TS Elemente nicht löschen können soll, alles andere aber schon?

    Das wird sicher Tricky.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    Nein, überlesen hast Du es nicht. Hast sogar gemeint, es wäre möglich. ;)

    Ja, an sich nur die TP, besser gesagt nur ganz bestimmte TP, aber würde ich dann selber irgendwie definieren müssen, oder halt für jene TP noch einen dritte Art von Platzhaltern erstellen.

    Vom tricky entnehme ich, dass es nicht mit einer einfachen Zusatzoption zum Platzhalter funktioniert.

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Translating-IT schrieb:

    Vom tricky entnehme ich, dass es nicht mit einer einfachen Zusatzoption zum Platzhalter funktioniert.

    Zumindest nicht wenn ich dich richtig verstehe und man diesen Platzhalter nicht mit Backspace oder ENTF löschen können soll. Das müsstes du einfach beim Tastendruck der jeweilige Taste analysieren und abfangen indem du dann den Cursor (im Beispiel von 'Backspace' einfach dann VOR das Objekt setzt anstatt es zu löschen.

    Bedenke aber das man auch Text markieren und löschen könnte, auch markieren und einfügen eines anderen Textes aus der Zwischenablage usw. müsste abgefangen werden.

    Das meine ich dann eben mit Tricky, man muss hier so einiges beachten. :/

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    Ja, das wären auch alle mir bekannten Szenarien, wie so ein Tag "gelöscht" werden könnte.

    Ich glaub das mit der Cursorposition habe ich schon irgendwo mal gelesen, auch mit Beispielcode. Nur ne Frage dazu:

    Ist es möglich über die Position des Cursors oder den ausgewählten Text herauszufinden, ob ein Tag oder ähnliches mit ausgewählt ist. Bei ausgewähltem Text könnte ich es mir gut vorstellen, bei Curorposition muss ich wohl den Text davor bzw. dahinter anschauen, oder?

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.