解决方案 »

  1.   

    复制与粘贴:::: this.rtbox.riBox.Copy();  与  this.rtbox.riBox.Paste();     rtbox 为Form3   riBox 为关联Form3 的 RichTextBox 控制         //关联Form3 的 RichTextBox 控制
            /// <summary> 获取 RichTextBox 的操作权限<para> <para>
            ///  关联 RichTextBox </para></para></summary>
            public RichTextBox riBox
            {
                get { return this.txtInput; }
                set { this.txtInput = value; }
            }
             // Form1 复制粘贴点击事件(粘贴部分,此事件分 文件菜单/工具栏/右键菜单  点击事件)
            private void MenuEdit_Copy_Click(object sender, EventArgs e)
            {
                this.rtbox.riBox.Copy();//复制
            }        private void MenuEdit_Paste_Click(object sender, EventArgs e)
            {
                this.rtbox.riBox.Paste();//粘贴
                mxdrsave.FbSave = false;//粘贴后,显示文件为未保存
            }
    //  Form1 中的委托   treev  为Form2
    //这里的委托执行的是点击 〖文件〗 『节点』即加载内容到 RichTextBox 中
    treev.LoadFind += new Acding(treev_LoadFind);  //执行委托
            void treev_LoadFind(string str)
            {
                RichTextBox rbox = rtbox.riBox;
                if (mxdrsave.FbSave) //判断文件是否已保存
                {
                    rbox.Clear();
                    mxdrsave.openFiles(this, str); //打开节点文件
                    SnuMs();//获取行列
                }
                else
                {
                    mxdrsave.AskDialog(this, rbox);//如果文件未保存,通知保存
                    if (mxdrsave.FbSave)
                    {
                        rbox.Clear();
                        mxdrsave.openFiles(this, str);
                        SnuMs();
                    }
                }
            }
            /// <summary> 为TreeView节点打开文件 </summary>
            /// <param name="form">窗口</param>
            /// <param name="path">文件名(含路径)</param>
            public void openFiles(Form form,string path)
            {
                FileStream fs = new FileStream(path,
                    FileMode.Open, FileAccess.Read, FileShare.None);
                StreamReader sr = new StreamReader(fs, Encoding.Default);
                this.readFile(sr.ReadToEnd());  //委托事件
                this.txtName = Path.GetFileName(path);  //获取文件名
                this.filePath = path;
                string str = Directory.GetParent(filePath).ToString();
                string strs = Path.GetExtension(filePath);
                this.txtName = Path.GetFileNameWithoutExtension(path);
                sr.Close();
                fs.Close();            this.FbOpen = true; this.FbSave = true; this.FbOpens = true;
                form.Text = string.Format("『{0}』{2}〖Mxdr记事本〗 - 所在目录:[{1}]", this.txtName, str, strs);
            }是否可以用另一种方式去判断已经粘贴了内容呢???
      

  2.   


           //  this.readFile(sr.ReadToEnd());  //委托事件的委托参数  sr.ReadToEnd() 读取文件流
            void mxdrsave_readFile(string str)
            {
                RichTextBox rbox = rtbox.riBox;
                rbox.Text = str;
                FbRiSave = false;
                mxdrsave.FbSave = true;
            }
      

  3.   

    用下面的方法暂时解决了,但不知道是否会存在BUG        /// <summary> 用 "剪贴板"的内容替换文本框中当前选定的内容 </summary>
            /// <param name="rbox">RichTextBox</param>
            public static void Pastes(RichTextBox rbox)
            {
                string str = string.Empty;
                // GetDataObject检索当前剪贴板上的数据 
                IDataObject iData = Clipboard.GetDataObject();            // 将数据与指定的格式进行匹配,返回bool
                if (iData.GetDataPresent(DataFormats.UnicodeText))
                    // GetData检索数据并指定一个格式 
                    rbox.SelectedText = (string)iData.GetData(DataFormats.UnicodeText);
                else
                    MessageBox.Show("目前剪贴板中数据不可转换为文本", "错误");        }
      

  4.   

    从楼主的解决办法中可以证明一件事,剪贴板中的内容绝不是简单的文字,而是一组对象.
    每个对象都有一个类型,可能是UNCODE文本,HTML,其他甚至是自定义的.
    从IE浏览器或者EXCEL中复制一段内容,分别粘贴到 记事本和WORD中,样子是不一样的,原因就在于此.
      

  5.   

    看了楼主写的代码,我就觉得楼主是书看多了还是怎么的,例如:this.rtbox.riBox.Copy();  与  this.rtbox.riBox.Paste(); 
    this非要写么,而且你这命名看了就叫人蛋痛,代码要简捷,命名要使人一看就明白。
      

  6.   

    谢谢提醒!!!命名已改正。现在有点头痛,用 DataFormats.UnicodeText  粘贴后变成 RichTextBox 默认书写格式(字号,粗体,样式都是),
    如果用其他格式,中文显示的都是乱码。
            /// <summary> 用 "剪贴板"的内容替换文本框中当前选定的内容 </summary>
            /// <param name="rbox">RichTextBox</param>
            public static void Pastes(RichTextBox rbox)
            {
                string str = string.Empty;
                // GetDataObject检索当前剪贴板上的数据 
                IDataObject iData = Clipboard.GetDataObject();
     
                // 将数据与指定的格式进行匹配,返回bool
                if (iData.GetDataPresent(DataFormats.UnicodeText))
                    // GetData检索数据并指定一个格式 
                    rbox.SelectedText = (string)iData.GetData(DataFormats.UnicodeText);
                else
                    MessageBox.Show("目前剪贴板中数据不可转换为文本", "错误");
     
            }
      

  7.   

    一般情况下,能够粘贴到记事本中就能粘贴到richtextbox控件中,该控件支持多种格式的文本类型,属性里可以设置。
      

  8.   

    RichTextBox控件中替换文本文字
    private void button1_Click(object sender, EventArgs e)
            {
                if (this.richTextBox1.SelectedText.ToString() == "")
                {
                    MessageBox.Show(//弹出提示信息
                        "请选重要替换的文本", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    this.richTextBox1.SelectedText = txt_Content.Text;//替换选中的文本
                }
            }