2013-08-14 2 views
1

Как получить последнее введенное слово (слово между двумя символами пробела или оно должно учитывать новую строку, абзац или вкладку) и ее начальную позицию и конечную позицию в Winform RichTextBox с использованием C#. Мне нужно, чтобы получить последнее слово, как только я нажимаю пространство ключейПолучить последнее слово, введенное в RichTextBox C#

Мой код (не работает должным образом):

private Word GetLastEnteredWord() 
    { 

     string _word = " "; 
     int pos = rtfText.SelectionStart; 
     Word word=new Word(_word,pos,0); 
     if (pos > 1) 
     { 
      string tmp = ""; 
      var f = new char(); 
      while (f != ' ' && f != 10 && pos > 0) 
      { 
       pos--; 
       tmp = rtfText.Text.Substring(pos, 1); 

        f = tmp[0]; 
        _word += f; 


      } 

      char[] ca = _word.ToCharArray(); 
      Array.Reverse(ca); 
      _word = new String(ca); 
      word.RWord = _word; 
      word.Si = pos; 
      word.Length = _word.Length; 


     } 

     return word; 
    } 


public class Word 
{ 
    public Word(string word, int starti, int len) 
    { 
     RWord = word; //word 
     Si = starti; //start index 
     Length = len; 
    } 

    public string RWord { get; set; } 
    public int Si { get; set; } 
    public int Length { get; set; } 
} 
+1

Вы использовали метод 'Split()' ...? можете ли вы предоставить более подробную информацию на свой вопрос, покажите пример текста, который вы говорите о – MethodMan

+0

. См. edit – jeff

ответ

2

Просто сделайте тривиальный трюк с Substring() методом:

//KeyPress event handler for your richTextBox 
private void richTextBox_KeyPress(object sender, KeyPressEventArgs e){ 
    if(e.KeyChar == ' '){ 
    int i = richTextBox.Text.TrimEnd().LastIndexOf(' '); 
    if(i != -1) MessageBox.Show(richTextBox.Text.Substring(i+1).TrimEnd()); 
    } 
} 
+0

, это сработало, однако мне пришлось кое-что подделать из-за какого-то глобального механизма крючка клавиатуры и некоторой логики приложения. Благодарю. – jeff

1

Это должно быть достаточно

string lastWord = richTextBox1.Text.TrimEnd().Substring(richTextBox1.Text.TrimEnd() 
      .LastIndexOf(' ')).Trim(); 
+0

Это бросит ** StartIndex не может быть меньше нуля. Имя параметра: startIndex ** –

Смежные вопросы