0

我有一个我用 C# 编写的基于 .NET Winforms 的程序,我使用该Select()方法以编程方式在 TextBox 中选择文本。我可以在屏幕上看到选定的文本,并且该SelectionLength成员报告了准确数量的选定字符,但该SelectedText成员不包含任何文本:

int indexPeriod = strLectureText.IndexOfAny(terminators, indexStart);

thisTextbox.Focus();

if (indexPeriod > -1)
{
    thisTextbox.Select(indexStart, (indexPeriod - indexStart) + 1);
}
else
{
    thisTextbox.Select(indexStart, thisTextbox.Text.Length);
}

Log.Debug("jtext len=" + thisTextbox.SelectionLength + " txt=" + thisTextbox.SelectedText);
thisTextbox.ScrollToCaret();

这是怎么回事?

2013 年 11 月 16 日更新

我根据@KingKing 的要求添加了额外的代码:

delegate void delegateMoveToNextTextFragment(ref TextBox thisTextbox, char[] terminators);
private void MoveToNextTextFragment(ref TextBox thisTextbox, char[] terminators)
{
 string strLectureText = String.Empty;

 strLectureText = thisTextbox.Text;
 int currentStartPos = thisTextbox.SelectionStart + thisTextbox.SelectionLength - 1

 // search the rest of the buffer after the currently-selected string to find the next period
 int skipLastChar = 0;

 // don't include last selected character in search
 try
 {
      if ((thisTextbox.SelectionLength > 0) & (strLectureText[currentStartPos] != '.'))
  {
       skipLastChar = 1;
  }
 }
 catch (Exception ex)
 {
      Debug.WriteLine("exception caught! ex=" + ex.Message);
  skipLastChar = 0;
 }

 int indexStart = 0;

 if (currentStartPos == 0)
 {
      indexStart = 0;
 }
 else
 {
      indexStart = currentStartPos + 1;
 }

 int indexPeriod = strLectureText.IndexOfAny(terminators, indexStart);

 if (indexPeriod > -1)
 {
      thisTextbox.Select(indexStart, (indexPeriod - indexStart) + 1);
 }
 else
 {
      thisTextbox.Select(indexStart, thisTextbox.Text.Length);
 }

 thisTextbox.Focus();
 Log.Debug("jtext len=" + thisTextbox.SelectionLength + " txt=" + thisTextbox.SelectedText);
 thisTextbox.ScrollToCaret();

}

4

0 回答 0