在richtextbox中添加button,再处理button的click事件,不知是不是楼主想要的
           this.richTextBox1.Controls.Add(this.button1);
this.button1.ForeColor=Color.Red;
this.button1.Text="取消";
this.button1.FlatStyle=System.Windows.Forms.FlatStyle.Flat;

解决方案 »

  1.   

    www.rcomponent.com 就有一个..
      

  2.   

    你说的功能, 要在model 中加入jscvript 支持.  现在还找不到类似的功能.
      

  3.   

    这个问题我解决了不过有点别扭,1.在richtext的mousemove事件中写入判断当前鼠标所在的字符,如果是所需要的字符则显示出手型光标,并显示下划线,改字体颜色为蓝色。2.在richtext的mousedown事件中写入判断当前鼠标所在的字符,如果是所需要的字符则执行你想要得操作,之后去掉下划线,恢复颜色。private void rtxtMessage_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    int index = rtxtMessage.GetCharIndexFromPosition( new System.Drawing.Point(e.X ,e.Y) );
    try
    {
    if((rtxtMessage.Text.Substring(index,4) == "取消发送") || (rtxtMessage.Text.Substring(index - 1,4) == "取消发送") ||
    (rtxtMessage.Text.Substring(index -2 ,4) == "取消发送") || (rtxtMessage.Text.Substring(index -3 ,4) == "取消发送"))
    {
    rtxtMessage.SelectionStart = index;
    if(rtxtMessage.SelectionFont.Underline)
    rtxtMessage.Cursor = Cursors.Hand;
    }
    else
    {
    if((rtxtMessage.Text.Substring(index,5) == "接收该文件") || (rtxtMessage.Text.Substring(index - 1,5) == "接收该文件") ||
    (rtxtMessage.Text.Substring(index -2 ,5) == "接收该文件") || (rtxtMessage.Text.Substring(index -3 ,5) == "接收该文件")
    || (rtxtMessage.Text.Substring(index -4 ,5) == "接收该文件"))
    {
    rtxtMessage.SelectionStart = index;
    if(rtxtMessage.SelectionFont.Underline)
    rtxtMessage.Cursor = Cursors.Hand;
    }
    else
    {
    if((rtxtMessage.Text.Substring(index,5) == "谢绝该文件") || (rtxtMessage.Text.Substring(index - 1,5) == "谢绝该文件") ||
    (rtxtMessage.Text.Substring(index -2 ,5) == "谢绝该文件") || (rtxtMessage.Text.Substring(index -3 ,5) == "谢绝该文件")
    || (rtxtMessage.Text.Substring(index -4 ,5) == "谢绝该文件"))
    {
    rtxtMessage.SelectionStart = index;
    if(rtxtMessage.SelectionFont.Underline)
    rtxtMessage.Cursor = Cursors.Hand;
    }
    else
    {
    if((rtxtMessage.Text.Substring(index,4) == "取消接收") || (rtxtMessage.Text.Substring(index - 1,4) == "取消接收") ||
    (rtxtMessage.Text.Substring(index -2 ,4) == "取消接收") || (rtxtMessage.Text.Substring(index -3 ,4) == "取消接收"))
    {
    rtxtMessage.SelectionStart = index;
    if(rtxtMessage.SelectionFont.Underline)
    rtxtMessage.Cursor = Cursors.Hand;
    }
    else
    rtxtMessage.Cursor = Cursors.IBeam;
    }

    }
    }
    }
    catch(Exception)
    {
    rtxtMessage.Cursor = Cursors.IBeam;
    }
    } private void rtxtMessage_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    int index = rtxtMessage.GetCharIndexFromPosition( new System.Drawing.Point(e.X ,e.Y) );
    AnalyzeRcv Analyser = new AnalyzeRcv();
    Exchanger ex = new Exchanger();
    string nowSendFileName;
    P2PCommToClient ExchangeToC = new P2PCommToClient(); try
    {
    if((rtxtMessage.Text.Substring(index,4) == "取消发送") || (rtxtMessage.Text.Substring(index - 1,4) == "取消发送") ||
    (rtxtMessage.Text.Substring(index -2 ,4) == "取消发送") || (rtxtMessage.Text.Substring(index -3 ,4) == "取消发送"))
    {
    if(!rtxtMessage.SelectionFont.Underline)
    return;
    InitMsgShower(index); if(index - 50 > 0)
    rtxtMessage.SelectionStart = index - 50;
    else
    rtxtMessage.SelectionStart = 0; rtxtMessage.SelectionLength = 50;
    nowSendFileName = Analyser.GetCancelFileName(rtxtMessage.SelectedText);

    ex.CancelSend((int)this.Tag,nowSendFileName);
    }
    else
    {
    if((rtxtMessage.Text.Substring(index,5) == "接收该文件") || (rtxtMessage.Text.Substring(index - 1,5) == "接收该文件") ||
    (rtxtMessage.Text.Substring(index -2 ,5) == "接收该文件") || (rtxtMessage.Text.Substring(index -3 ,5) == "接收该文件")
    || (rtxtMessage.Text.Substring(index -4 ,5) == "接收该文件") && rtxtMessage.SelectionFont.Underline)
    {
    if(!rtxtMessage.SelectionFont.Underline)
    return;
    InitMsgShower(index);

    if(folderBrowserDlg.ShowDialog() == DialogResult.OK)
    {
    //在此处添加 接收线程的创建,并将其加入的Exchanger的接收线程池中
    if(index - 50 > 0)
    rtxtMessage.SelectionStart = index - 50;
    else
    rtxtMessage.SelectionStart = 0; rtxtMessage.SelectionLength = 50;
    nowSendFileName = Analyser.GetCancelFileName(rtxtMessage.SelectedText);
    ex.AcceptReceive((int)this.Tag,nowSendFileName,folderBrowserDlg.SelectedPath);

    }
    }
    else
    {
    if((rtxtMessage.Text.Substring(index,5) == "谢绝该文件") || (rtxtMessage.Text.Substring(index - 1,5) == "谢绝该文件") ||
    (rtxtMessage.Text.Substring(index -2 ,5) == "谢绝该文件") || (rtxtMessage.Text.Substring(index -3 ,5) == "谢绝该文件")
    || (rtxtMessage.Text.Substring(index -4 ,5) == "谢绝该文件"))
    {
    if(!rtxtMessage.SelectionFont.Underline)
    return;
    InitMsgShower(index); if(index - 50 > 0)
    rtxtMessage.SelectionStart = index - 50;
    else
    rtxtMessage.SelectionStart = 0; rtxtMessage.SelectionLength = 50;
    nowSendFileName = Analyser.GetCancelFileName(rtxtMessage.SelectedText);
    ex.RefuseReceive((int)this.Tag,nowSendFileName);
    }
    else
    {
    if((rtxtMessage.Text.Substring(index,4) == "取消接收") || (rtxtMessage.Text.Substring(index - 1,4) == "取消接收") ||
    (rtxtMessage.Text.Substring(index -2 ,4) == "取消接收") || (rtxtMessage.Text.Substring(index -3 ,4) == "取消接收"))
    {
    if(!rtxtMessage.SelectionFont.Underline)
    return;
    InitMsgShower(index); if(index - 50 > 0)
    rtxtMessage.SelectionStart = index - 50;
    else
    rtxtMessage.SelectionStart = 0; rtxtMessage.SelectionLength = 50; nowSendFileName = Analyser.GetCancelFileName(rtxtMessage.SelectedText);
    ex.CancelReceive((int)this.Tag,nowSendFileName);
    }
    }

    }
    }
    }
    catch(Exception f)
    {
    }
    }
      

  4.   

    你不一定要用 RichTextBox嘛。RichTextBox本身不支持你要的功能。