28. juni 2010 - 20:15Der 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.
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.
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?
Synes godt om
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.
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; } }
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.
Synes godt om
Ny brugerNybegynder
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.