2009-09-16 9 views
2

Je rencontre des problèmes pour obtenir le contrôle du contrôle WPF richtextbox. Ce que je veux est comme suit: J'ai un contrôle RichTextBox appelé richTextBox1 que j'ai rempli avec des données d'une base de données.Comment obtenir un texte de paragraphe unique à partir d'une zone richtext en double-cliquant dessus

Je dois obtenir le texte sur une seule ligne (ce qui signifie un seul paragraphe) lorsque je clique sur le contrôle.

Tout ce que j'ai trouvé sur le net est un code pour copier TOUS les textes RTB.

Des idées pour obtenir juste le texte dans la ligne qui a été cliquée?

+0

Je construis le code avec VS2008 C# donc je besoin de la réponse avec C# ... –

Répondre

2

J'ai fait du creusement de bande sérieux et voici une solution de travail.

private void richTextBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    TextPointer t = richTextBox1.GetPositionFromPoint(e.GetPosition(richTextBox1), true); 

    string textAfterCursor = t.GetTextInRun(LogicalDirection.Forward); 
    string textBeforeCursor = t.GetTextInRun(LogicalDirection.Backward); 

    string FullParagraphText = textBeforeCursor+textAfterCursor; 
    MessageBox.Show(FullParagraphText); 
} 

(grâce à Justin-Josef avec son poste: http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/01/29/tapuz-net-getting-wpf-s-flowdocument-and-flowdoucmentreader-mouseover-text.aspx )

+0

Ce n'est pas correct comme une ligne peut être composé de plusieurs courses. En fait, vous pouvez avoir un mot composé de 2 courses. – Mark

-1

OOPS, je concated les chaînes dans l'ordre inverse. Voici le code révisé ... :) Ohad.

private void richTextBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     TextPointer t = richTextBox1.GetPositionFromPoint(e.GetPosition(richTextBox1), true); 

     string textAfterCursor = t.GetTextInRun(LogicalDirection.Forward); 
     string textBeforeCursor = t.GetTextInRun(LogicalDirection.Backward); 

     string FullParagraphText = textBeforeCursor+textAfterCursor; 
     MessageBox.Show(FullParagraphText); 


    } 
0

Le code suivant est correct:

private void richTextBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    TextPointer tp = richTextBox1.GetPositionFromPoint(e.GetPosition(richTextBox1), true); 

    TextPointer line_start = tp.GetLineStartPosition(0); 
    var nextStart = pos.GetLineStartPosition(1); 
    TextPointer lineEnd = (nextStart != null ? nextStart : pos.DocumentEnd).GetInsertionPosition(LogicalDirection.Backward); 

    TextRange tr = new TextRange(line_start, lineEnd); 
    string line = tr.Text; 
    MessageBox.Show(line); 
}