拷贝后光标定位问题
环境:textcontrol 17, vs2010界面上有两个textcontrol,点击“测试”时,将第一个textcontrol里的内容复制到第二里面。
第一个textcontrol的光标是紧跟在文字后面,拷贝后,在第二个textcontrol中,光标定位到了新的一行。
有没有办法不多出这一行呢?
回复 1# forachange 的帖子
你可以使用以下方法来实现两个TextControl控件内容之间的拷贝操作:private void Button_Click(object sender, RoutedEventArgs e)
{
byte[] bytes;
textControl1.Save(out bytes, BinaryStreamType.InternalFormat);
textControl2.Load(bytes, BinaryStreamType.InternalFormat);
} 谢谢dof.
但是,如果是StringStreamType.RichTextFormat,RTF格式的内容,有没有办法解决这个问题呢? 使用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 = "";
}
谢谢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);一行内容时:
两行内容时:
以上代码多行的时候的确有问题,我重新修改了,主要方法就是将自动添加的“\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);
} 谢谢dof。
但这仅仅适用于纯文本内容。
当有图片或其它格式的内容时,就不适用了。
如果你的文档不是纯文本,我还是建议你使用以下代码,因为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其实拷贝前后的内容可能会发生变化。 谢谢dof。
看来只能改保存内容的格式了。 OK :)
页:
[1]