因为"—"在richtext里面表示为"\emdash"
但是粘到剪贴板里就变成了"—"
然后粘回richtext就当普通"-"处理了
这实际上是windows的一个剪贴板bug一个方法是写个事件监视Clipbord,一旦发现有"—"
就 Clipboard.SetText(Clipboard.GetText(), TextDataFormat.Rtf);
这样再粘回来就OK了

解决方案 »

  1.   


    我跟楼主一样有问题大概跟.net及系统的版本有关...
    我这里3.5打sp1补丁系统sp2
      

  2.   


    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                this.richTextBox1.Text = "字符 ——";
            }        private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(this.richTextBox1.Text);
            }        private void button2_Click(object sender, EventArgs e)
            {
                Form2 f = new Form2();
                if (DialogResult.OK == f.ShowDialog())
                {
                    MessageBox.Show(f.richTextBox1.Text);
                }
            }
        }剪切板可以这样实现,但是一个新窗体呢。明明里面是对的。但调用显示出来也变成了-Form2里面就一个public的richTextBox1,一个ok按钮,按下去后this.DialogResult = DialogResult.OK;
      

  3.   

    我用你的代码测试了,但是我这里内部传值是正常的
    建议你
    A)检查自己framework的版本
    B)实在不行的话就把所有的"—"字符都用Unicode转义码代替(就是像\u5335这样格式的编码)
      

  4.   

    实验的结果是,我这边Form内及跨Form传值皆正常(使用楼主提供代码)
    可见问题似乎与楼主所用之Framework版本有关
    A)试着检查/升级Framework
    B)用"\u2015"或其他unicode转义字串替换"—"试一下(两者在winform下等效)因为楼主你提出的Form内及跨Form问题我这边无法复原错误,所以无法帮你
    只能建议你多下断点调试,看看传递中,及传递后的richtextbox.reachtext有无异常以上