forachange 发表于 2012-5-23 10:54:00

拷贝后光标定位问题

环境:textcontrol 17, vs2010
界面上有两个textcontrol,点击“测试”时,将第一个textcontrol里的内容复制到第二里面。
第一个textcontrol的光标是紧跟在文字后面,拷贝后,在第二个textcontrol中,光标定位到了新的一行。
有没有办法不多出这一行呢?

ZenosZeng 发表于 2012-5-23 14:56:00

回复 1# forachange 的帖子

你可以使用以下方法来实现两个TextControl控件内容之间的拷贝操作:
    private void Button_Click(object sender, RoutedEventArgs e)
    {            
      byte[] bytes;
      textControl1.Save(out bytes, BinaryStreamType.InternalFormat);
      textControl2.Load(bytes, BinaryStreamType.InternalFormat);         
    }

forachange 发表于 2012-5-23 15:51:00

谢谢dof.
但是,如果是StringStreamType.RichTextFormat,RTF格式的内容,有没有办法解决这个问题呢?

ZenosZeng 发表于 2012-5-23 16:17:00

使用RTF格式拷贝之后,会自动在文本最后面添加“\r\n”,所以只能通过代码将其删除:
    private void Button_Click(object sender, RoutedEventArgs e)
    {            
      //byte[] bytes;
      //textControl1.Save(out bytes, BinaryStreamType.InternalFormat);
      //textControl2.Load(bytes, BinaryStreamType.InternalFormat);

      string str;
      textControl1.Save(out str, StringStreamType.RichTextFormat);
      textControl2.Load(str, StringStreamType.RichTextFormat);
      textControl2.Selection.Start = textControl1.Text.Length;
      textControl2.Selection.Length = 2;
      textControl2.Selection.Text = "";
    }

forachange 发表于 2012-5-23 16:39:00

谢谢dof。
测试时发现,当只有一行内容时,没有问题,但是有两行内容时,就不行了string str = string.Empty;
            textControl1.Save(out str, StringStreamType.RichTextFormat);
            textControl2.Load(str, StringStreamType.RichTextFormat);            
            MessageBox.Show(textControl1.Text.Length + "/" + textControl2.Text.Length);
            textControl2.Selection.Start = textControl1.Text.Length;
            textControl2.Selection.Length = 2;
            textControl2.Selection.Text = "";
            MessageBox.Show(textControl1.Text.Length + "/" + textControl2.Text.Length);一行内容时:



两行内容时:

ZenosZeng 发表于 2012-5-23 17:16:00

以上代码多行的时候的确有问题,我重新修改了,主要方法就是将自动添加的“\r\n”删除:
    private void Button_Click(object sender, RoutedEventArgs e)
    {            
      string str = string.Empty;
      textControl1.Save(out str, StringStreamType.RichTextFormat);
      textControl2.Load(str, StringStreamType.RichTextFormat);
      textControl2.Text = textControl2.Text.Substring(0, textControl1.Text.Length);
    }

forachange 发表于 2012-5-23 17:27:00

谢谢dof。
但这仅仅适用于纯文本内容。
当有图片或其它格式的内容时,就不适用了。

ZenosZeng 发表于 2012-5-23 17:40:00

如果你的文档不是纯文本,我还是建议你使用以下代码,因为TX文档中除了文本、图片还可能有文本框、文本域等其它类型的内容:    private void Button_Click(object sender, RoutedEventArgs e)
    {            
      byte[] bytes;
      textControl1.Save(out bytes, BinaryStreamType.InternalFormat);
      textControl2.Load(bytes, BinaryStreamType.InternalFormat);         
    }
通过InternalFormat格式是TX内部格式,拷贝前后内容是一致的;如果使用RichTextFormat其实拷贝前后的内容可能会发生变化。

forachange 发表于 2012-5-23 17:56:00

谢谢dof。
看来只能改保存内容的格式了。

ZenosZeng 发表于 2012-5-24 15:03:00

OK :)
页: [1]
查看完整版本: 拷贝后光标定位问题