找回密码
 立即注册

QQ登录

只需一步,快速开始

forachange

高级会员

20

主题

63

帖子

1803

积分

高级会员

积分
1803

活字格认证

forachange
高级会员   /  发表于:2012-5-23 10:54  /   查看:7166  /  回复:9
环境:textcontrol 17  , vs2010
界面上有两个textcontrol,点击“测试”时,将第一个textcontrol里的内容复制到第二里面。
第一个textcontrol的光标是紧跟在文字后面,拷贝后,在第二个textcontrol中,光标定位到了新的一行。
有没有办法不多出这一行呢?
未命名.jpg (23.24 KB, 下载次数: 391)

9 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-23 14:56:00
沙发

回复 1# forachange 的帖子

你可以使用以下方法来实现两个TextControl控件内容之间的拷贝操作:
  1.     private void Button_Click(object sender, RoutedEventArgs e)
  2.     {            
  3.         byte[] bytes;
  4.         textControl1.Save(out bytes, BinaryStreamType.InternalFormat);
  5.         textControl2.Load(bytes, BinaryStreamType.InternalFormat);           
  6.     }
复制代码
回复 使用道具 举报
forachange
高级会员   /  发表于:2012-5-23 15:51:00
板凳
谢谢dof.
但是,如果是StringStreamType.RichTextFormat,RTF格式的内容,有没有办法解决这个问题呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-23 16:17:00
地板
使用RTF格式拷贝之后,会自动在文本最后面添加“\r\n”,所以只能通过代码将其删除:
  1.     private void Button_Click(object sender, RoutedEventArgs e)
  2.     {            
  3.         //byte[] bytes;
  4.         //textControl1.Save(out bytes, BinaryStreamType.InternalFormat);
  5.         //textControl2.Load(bytes, BinaryStreamType.InternalFormat);

  6.         string str;
  7.         textControl1.Save(out str, StringStreamType.RichTextFormat);
  8.         textControl2.Load(str, StringStreamType.RichTextFormat);
  9.         textControl2.Selection.Start = textControl1.Text.Length;
  10.         textControl2.Selection.Length = 2;
  11.         textControl2.Selection.Text = "";
  12.     }
复制代码
回复 使用道具 举报
forachange
高级会员   /  发表于:2012-5-23 16:39:00
5#
谢谢dof。
测试时发现,当只有一行内容时,没有问题,但是有两行内容时,就不行了
  1. string str = string.Empty;
  2.             textControl1.Save(out str, StringStreamType.RichTextFormat);
  3.             textControl2.Load(str, StringStreamType.RichTextFormat);            
  4.             MessageBox.Show(textControl1.Text.Length + "/" + textControl2.Text.Length);
  5.             textControl2.Selection.Start = textControl1.Text.Length;
  6.             textControl2.Selection.Length = 2;
  7.             textControl2.Selection.Text = "";
  8.             MessageBox.Show(textControl1.Text.Length + "/" + textControl2.Text.Length);
复制代码
一行内容时:
3550398075742.jpg (14.79 KB, 下载次数: 351)
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-23 17:16:00
6#
以上代码多行的时候的确有问题,我重新修改了,主要方法就是将自动添加的“\r\n”删除:
  1.     private void Button_Click(object sender, RoutedEventArgs e)
  2.     {            
  3.         string str = string.Empty;
  4.         textControl1.Save(out str, StringStreamType.RichTextFormat);
  5.         textControl2.Load(str, StringStreamType.RichTextFormat);
  6.         textControl2.Text = textControl2.Text.Substring(0, textControl1.Text.Length);
  7.     }
复制代码
回复 使用道具 举报
forachange
高级会员   /  发表于:2012-5-23 17:27:00
7#
谢谢dof。
但这仅仅适用于纯文本内容。
当有图片或其它格式的内容时,就不适用了。
04.jpg (15.82 KB, 下载次数: 344)
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-23 17:40:00
8#
如果你的文档不是纯文本,我还是建议你使用以下代码,因为TX文档中除了文本、图片还可能有文本框、文本域等其它类型的内容:
  1.     private void Button_Click(object sender, RoutedEventArgs e)
  2.     {            
  3.         byte[] bytes;
  4.         textControl1.Save(out bytes, BinaryStreamType.InternalFormat);
  5.         textControl2.Load(bytes, BinaryStreamType.InternalFormat);         
  6.     }
复制代码
通过InternalFormat格式是TX内部格式,拷贝前后内容是一致的;如果使用RichTextFormat其实拷贝前后的内容可能会发生变化。
回复 使用道具 举报
forachange
高级会员   /  发表于:2012-5-23 17:56:00
9#
谢谢dof。
看来只能改保存内容的格式了。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-24 15:03:00
10#
OK
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部