文本指针针对不同的桌面分辨率返回错误的位置 [英] Text Pointer returning wrong positions for different desktop resolutions

查看:63
本文介绍了文本指针针对不同的桌面分辨率返回错误的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我正在努力要求在富文本框中自动选择文字。将突出显示在RichTextBox内容中括号内的单词。
焦点将移动到括号中的下一个单词,单词将在按下时突出显示TAB按钮。 



TextPointer已用于选择Text。但是,  它非常不一致。索引位置从桌面变为桌面变为
。 


使用的代码如下:




                TextRange textRange = new TextRange(rtxtMessage.Document.ContentStart,rtxtMessage.Document.ContentEnd);

                string richText = new TextRange(rtxtMessage.Document.ContentStart,rtxtMessage.Document.ContentEnd).Text;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; string [] result = Regex.Matches(textRange.Text,@" \(。*?\)")。Cast< Match>()。选择(m => m.Value).ToArray() ;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; TextPointer startPos = rtxtMessage.Document.ContentStart;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; TextPointer endPos = rtxtMessage.Document.ContentStart; 

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; foreach(结果中的字符串项)

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var start = rtxtMessage.Document.ContentStart;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;   

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; startPos = endPos.GetPositionAtOffset(new TextRange(rtxtMessage.Document.ContentStart,rtxtMessage.Document.ContentEnd).Text.IndexOf(item));

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; endPos = startPos.GetPositionAtOffset(item.Length);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; abc = richText.IndexOf(item)+ item.Length;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;休息;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; rtxtMessage.Focus();

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; rtxtMessage.Selection.Select(startPos,endPos);

任何帮助在解决这个问题时将不胜感激。

解决方案

嗨Abhijit PS,


请试试以下代码,适用于我。

 TextRange textRange = new TextRange(rtxtMessage.Document.ContentStart,rtxtMessage.Document.ContentEnd); 
string richText = new TextRange(rtxtMessage.Document.ContentStart,rtxtMessage.Document.ContentEnd).Text;
string [] result = Regex.Matches(textRange.Text,@" \(。*?\)")。Cast< Match>()。选择(m => m.Value) .ToArray();
TextPointer startPos = rtxtMessage.Document.ContentStart;
TextPointer endPos = rtxtMessage.Document.ContentStart;
foreach(结果中的字符串项)
{
var start = rtxtMessage.Document.ContentStart;

startPos = textRange.Start.GetPositionAtOffset(new TextRange(rtxtMessage.Document.ContentStart,rtxtMessage.Document.ContentEnd).Text.IndexOf(item),LogicalDirection.Forward); // endPos.GetPositionAtOffset( new TextRange(rtxtMessage.Document.ContentStart,rtxtMessage.Document.ContentEnd).Text.IndexOf(item));
endPos = startPos.GetPositionAtOffset(item.Length);
abc = richText.IndexOf(item)+ item.Length;
休息;
}
rtxtMessage.Focus();
rtxtMessage.Selection.Select(startPos,endPos);

祝你好运,


章龙


Hi,

I am working on a requirement to auto-select a text in Rich Text Box. Words that are in bracket in the content of RichTextBox will be highlighted. Focus will move to the next word in bracket and the word will be highlighted on pressing TAB button. 

TextPointer has been used for selecting Text. However, it is very inconsistent. The index position is getting changed from desktop to desktop. 

The code used is mentioned below:


                TextRange textRange = new TextRange(rtxtMessage.Document.ContentStart, rtxtMessage.Document.ContentEnd);
                string richText = new TextRange(rtxtMessage.Document.ContentStart, rtxtMessage.Document.ContentEnd).Text;
                string[] result = Regex.Matches(textRange.Text, @"\(.*?\)").Cast<Match>().Select(m => m.Value).ToArray();
                TextPointer startPos = rtxtMessage.Document.ContentStart;
                TextPointer endPos = rtxtMessage.Document.ContentStart; 
                foreach (string item in result)
                {
                    var start = rtxtMessage.Document.ContentStart;
                    
                    startPos = endPos.GetPositionAtOffset(new TextRange(rtxtMessage.Document.ContentStart, rtxtMessage.Document.ContentEnd).Text.IndexOf(item));
                    endPos = startPos.GetPositionAtOffset(item.Length);
                    abc = richText.IndexOf(item) + item.Length;
                    break;
                }
                rtxtMessage.Focus();
                rtxtMessage.Selection.Select(startPos, endPos);

Any help in resolving this issue will be appreciated.

解决方案

Hi Abhijit PS,

Please try the following code, which works on my side.

TextRange textRange = new TextRange(rtxtMessage.Document.ContentStart, rtxtMessage.Document.ContentEnd);
            string richText = new TextRange(rtxtMessage.Document.ContentStart, rtxtMessage.Document.ContentEnd).Text;
            string[] result = Regex.Matches(textRange.Text, @"\(.*?\)").Cast<Match>().Select(m => m.Value).ToArray();
            TextPointer startPos = rtxtMessage.Document.ContentStart;
            TextPointer endPos = rtxtMessage.Document.ContentStart;
            foreach (string item in result)
            {
                var start = rtxtMessage.Document.ContentStart;

                startPos = textRange.Start.GetPositionAtOffset(new TextRange(rtxtMessage.Document.ContentStart, rtxtMessage.Document.ContentEnd).Text.IndexOf(item), LogicalDirection.Forward);// endPos.GetPositionAtOffset(new TextRange(rtxtMessage.Document.ContentStart, rtxtMessage.Document.ContentEnd).Text.IndexOf(item));
                endPos = startPos.GetPositionAtOffset(item.Length);
                abc = richText.IndexOf(item) + item.Length;
                break;
            }
            rtxtMessage.Focus();
            rtxtMessage.Selection.Select(startPos, endPos);

Best regards,

Zhanglong


这篇关于文本指针针对不同的桌面分辨率返回错误的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆