Avatar billede Slettet bruger
28. juni 2010 - 20:15 Der er 8 kommentarer og
1 løsning

Bevare selection i RichTextBox (WPF)

I får lige spørgsmålet på fremmedsprog, som tyskerne mener det der. Det er oprettet på stackoverflow, men ingen svarer..

I'm using a RichTextBox in WPF and want to:

1. Input text
2. Save text to an object
3. Save the selection
4. Clear RTB
5. Insert the text from the object
6. Set the previous selection again

1 and 2 is done, easy. I can easily save the selection using the Selection property on the RTB to get the TextSelection object. But after clearing the RTB the, the TextSelection object changes so i cannot use it to restore the selection.

So how can i achive this?
Avatar billede claes57 Ekspert
28. juni 2010 - 20:20 #1
byt om på #2 og #3
Avatar billede Slettet bruger
28. juni 2010 - 20:36 #2
Hvad forskel skulle det gøre?

Mit problem er at TextPointer/TextSelection objektet ændres når jeg rydder teksten i boksen (det er jeg nød til at praktiske årsager) og indsætte den igen samt bibeholde selection/caret position. Jeg kan altså ikke genbruge det object. RichTextBox i WPF har jo ikke bare selectionstart/selectionend properties som int, så det gør det noget sværre.
Avatar billede claes57 Ekspert
28. juni 2010 - 20:48 #3
du har et problem, og du vil ikke teste en alternativ løsning - det er så to problemer.
Hvis der nu i 'systemet' var noget, der gemte data (som du jo taber med din løsning). Men nej - det tænker du ikke, så det kan ikke være en løsning.
Hvorfor spørge, når du ikke vil have forslag til løsning.
Jeg accepterer, hvis du skriver 'har prøvet - virker ikke' men uden din kildekode, så skal jeg jo stable et helt brugbart eksempel sammen - og med din indsats, hvorfor skulle jeg gide det?
Avatar billede Slettet bruger
28. juni 2010 - 21:18 #4
Hvis du er så negativ, så lad være med at svarer, it's that simple.

Skridt 2 og 3 har intet med selve RichTextBoxen at gøre, da jeg blot gemmer teksten i et array som List<string> der indikere lines. Jeg skrev blot punkterne ned for at give et kort indblik i hvad jeg vil.

Mit reelle problem er at gemme selection, clear RTB og restore igen.    I den gamle RTB kunne dette jo gøres med int positioner, det kan det ikke her.
Avatar billede Slettet bruger
29. juni 2010 - 17:48 #5
Nogen der kan hjælpe? :)
Avatar billede Slettet bruger
08. juli 2010 - 22:24 #6
lukket
Avatar billede Syska Mester
08. juli 2010 - 22:41 #7
løsning ?
Avatar billede Slettet bruger
08. juli 2010 - 23:03 #8
Lang forklaring og løsning, men:

For at få selection start:

public int SelectionStart
        {
            get
            {
                TextPointer start = PART_TitleTextBox.Document.ContentStart;
                TextPointer caret = this.PART_TitleTextBox.Selection.Start;
                TextRange range = new TextRange(start, caret);

                //Calculate 2 extra chars for each line, why? i don't know..
                string[] split = Regex.Split(range.Text, Environment.NewLine);

                int length = range.Text.Length;

                if (split.Length > 0)
                    length += (split.Length * 2);

                return length;
            }
        }


Selection length:

public int SelectionLength
        {
            get { return PART_TitleTextBox.Selection.Text.Length; }
        }

Set selection:

TextPointer startPointer = PART_TitleTextBox.Document.ContentStart.GetPositionAtOffset(startIndex, LogicalDirection.Forward);
                    TextPointer endPointer = PART_TitleTextBox.Document.ContentStart.GetPositionAtOffset(startIndex + length, LogicalDirection.Forward);

                    this.PART_TitleTextBox.Selection.Select(startPointer, endPointer);
Avatar billede Syska Mester
08. juli 2010 - 23:59 #9
Som svar til: //Calculate 2 extra chars for each line, why? i don't know..

"\r\n" er 2 chars ... derfor skal du ligge 2 til for hver linje.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester