工程中有一richtextbox控件,现在想:在其内容中选取特定格式文字,比如8位连续数字,高亮并加鼠标点击事件。
指的是点击高亮文字产生事件

解决方案 »

  1.   

    OnSelectionChanged 事件里面,记下选中的内容如果是连续8位数字,把它高亮(选上了就自动高亮了吧?)你是要发送点击事件,还是要接收?接收的话有OnMouseClick事件,发送的话可以SendKeys
      

  2.   

    楼主的意思就是类似在VS编译器里写一个url编译器会自动变色,并能单击打开链接。
    lz可以到网上搜搜其他TXT控件有实现这功能的没
      

  3.   

    不知道有啥API之类的,可以捕捉到特定格式文字然后...没啥好办法
      

  4.   

    我先告诉你怎么把特定的文字高亮显示吧using System.Text.RegularExpressions;namespace WindowsFormsApplication21
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                richTextBox1.SelectionColor = Color.Red;            Regex r = new Regex(@"\d+", RegexOptions.Multiline);
                MatchCollection mc = r.Matches(richTextBox1.Text);            foreach (Match m in mc)
                {
                    richTextBox1.Select(m.Index, m.Length);
                    richTextBox1.SelectionColor = Color.Red;
                    richTextBox1.SelectionFont = new Font(this.Font.FontFamily, this.Font.Size, FontStyle.Bold);
                }
            }
        }
    }
      

  5.   

    UP ,顶上一楼,richtextbox 中对部分文字的点击事件好像得自己来实现,
      

  6.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;namespace P2PControlLib
    {
        public class P2PTextBox : RichTextBox
        {
            public event LinkClickedEventHandler OnClickUser;
            Dictionary<Point, string> linkdic = new Dictionary<Point, string>();
            List<Point> linklist = new List<Point>();
            string link = null;
            private Font lastfont = null;
            public P2PTextBox()
                : base()
            {
                //this.ReadOnly = true;
            }        /// <summary>
            /// 设置显示格式
            /// </summary>
            /// <param name="c"></param>
            /// <param name="s"></param>
            private void SetTextStyle(Color c, FontStyle s)
            {
                this.Select(Text.Length, 0);
                this.SelectionColor = c;
                this.SelectionFont = new Font(Font, s);
                this.lastfont = SelectionFont;
            }
            /// <summary>
            /// 将文本添加到本控件
            /// </summary>
            /// <param name="text"></param>
            /// <param name="c"></param>
            /// <param name="s"></param>
            private void WriteText(string text, Color c, FontStyle s)
            {
                SetTextStyle(c, s);
                this.AppendText(text);
            }        /// <summary>
            /// 写普通文本
            /// </summary>
            /// <param name="text"></param>
            public void WriteText(string text)
            {
                WriteText(text, ForeColor, FontStyle.Regular);
            }        /// <summary>
            /// 写用户名
            /// </summary>
            /// <param name="user"></param>
            public void WriteUserName(string user,string id)
            {
                WriteLink(user,id);
            }        /// <summary>
            /// 添加一个警告
            /// </summary>
            /// <param name="alarm"></param>
            public void AppendAlarm(string alarm)
            {
                WriteText(alarm, Color.Red, FontStyle.Bold);
            }        /// <summary>
            /// 添加一张图片
            /// </summary>
            /// <param name="img"></param>
            public void AppendImg(Image img)
            {
                object obj = Clipboard.GetDataObject();
                Clipboard.SetDataObject(img);
                this.ReadOnly = false;
                this.Paste();//
                this.ReadOnly = true;
                Clipboard.SetDataObject(obj, true);
            }        /// <summary>
            /// 写入一个超链接形式的文本
            /// </summary>
            /// <param name="link"></param>
            private void WriteLink(string link, string id)
            {
                Point p = new Point(TextLength);
                WriteText(link, Color.Blue, FontStyle.Underline);
                p.Y = TextLength;
                linklist.Add(p);
                linkdic.Add( p,id);
            }        protected override void OnMouseMove(MouseEventArgs e)
            {
                base.OnMouseMove(e);
                if (lastfont == null)
                {
                    return;
                }
                Point p = GetPositionFromCharIndex(TextLength-1);
                this.FindForm().Text = p.ToString();
                Graphics g = this.CreateGraphics();
                Size s = g.MeasureString("a", this.lastfont).ToSize();
                if (e.Y < p.Y + s.Height || e.X < p.X + s.Width)
                {
                    int index = this.GetCharIndexFromPosition(e.Location);                foreach (KeyValuePair<Point, string> var in linkdic)
                    {
                        if (index >= var.Key.X && index <= var.Key.Y)
                        {                        if (!this.Cursor.Equals(Cursors.Hand))
                            {
                                this.Cursor = Cursors.Hand;
                            }
                            link = var.Value;
                            return;
                        }
                    }
                }            this.Cursor = Cursors.IBeam;
                link = null;
            }        protected override void OnMouseDown(MouseEventArgs e)
            {
                base.OnMouseDown(e);
                if (link != null && OnClickUser != null)
                {
                    OnClickUser(this, new LinkClickedEventArgs(link));
                }
            }
        }
    }
      

  7.   


    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using System.Windows.Forms; 
    using System.Drawing; namespace P2PControlLib 

        public class P2PTextBox : RichTextBox 
        { 
            public event LinkClickedEventHandler OnClickUser; 
            Dictionary <Point, string> linkdic = new Dictionary <Point, string>(); 
            List <Point> linklist = new List <Point>(); 
            string link = null; 
            private Font lastfont = null; 
            public P2PTextBox() 
                : base() 
            { 
                //this.ReadOnly = true; 
            }         /// <summary> 
            /// 设置显示格式 
            /// </summary> 
            /// <param name="c"> </param> 
            /// <param name="s"> </param> 
            private void SetTextStyle(Color c, FontStyle s) 
            { 
                this.Select(Text.Length, 0); 
                this.SelectionColor = c; 
                this.SelectionFont = new Font(Font, s); 
                this.lastfont = SelectionFont; 
            } 
            /// <summary> 
            /// 将文本添加到本控件 
            /// </summary> 
            /// <param name="text"> </param> 
            /// <param name="c"> </param> 
            /// <param name="s"> </param> 
            private void WriteText(string text, Color c, FontStyle s) 
            { 
                SetTextStyle(c, s); 
                this.AppendText(text); 
            }         /// <summary> 
            /// 写普通文本 
            /// </summary> 
            /// <param name="text"> </param> 
            public void WriteText(string text) 
            { 
                WriteText(text, ForeColor, FontStyle.Regular); 
            }         /// <summary> 
            /// 写用户名 
            /// </summary> 
            /// <param name="user"> </param> 
            public void WriteUserName(string user,string id) 
            { 
                WriteLink(user,id); 
            }         /// <summary> 
            /// 添加一个警告 
            /// </summary> 
            /// <param name="alarm"> </param> 
            public void AppendAlarm(string alarm) 
            { 
                WriteText(alarm, Color.Red, FontStyle.Bold); 
            }         /// <summary> 
            /// 添加一张图片 
            /// </summary> 
            /// <param name="img"> </param> 
            public void AppendImg(Image img) 
            { 
                object obj = Clipboard.GetDataObject(); 
                Clipboard.SetDataObject(img); 
                this.ReadOnly = false; 
                this.Paste();// 
                this.ReadOnly = true; 
                Clipboard.SetDataObject(obj, true); 
            }         /// <summary> 
            /// 写入一个超链接形式的文本 
            /// </summary> 
            /// <param name="link"> </param> 
            private void WriteLink(string link, string id) 
            { 
                Point p = new Point(TextLength); 
                WriteText(link, Color.Blue, FontStyle.Underline); 
                p.Y = TextLength; 
                linklist.Add(p); 
                linkdic.Add( p,id); 
            }         protected override void OnMouseMove(MouseEventArgs e) 
            { 
                base.OnMouseMove(e); 
                if (lastfont == null) 
                { 
                    return; 
                } 
                Point p = GetPositionFromCharIndex(TextLength-1); 
                this.FindForm().Text = p.ToString(); 
                Graphics g = this.CreateGraphics(); 
                Size s = g.MeasureString("a", this.lastfont).ToSize(); 
                if (e.Y < p.Y + s.Height || e.X < p.X + s.Width) 
                { 
                    int index = this.GetCharIndexFromPosition(e.Location);                 foreach (KeyValuePair <Point, string> var in linkdic) 
                    { 
                        if (index >= var.Key.X && index <= var.Key.Y) 
                        {                         if (!this.Cursor.Equals(Cursors.Hand)) 
                            { 
                                this.Cursor = Cursors.Hand; 
                            } 
                            link = var.Value; 
                            return; 
                        } 
                    } 
                }             this.Cursor = Cursors.IBeam; 
                link = null; 
            }         protected override void OnMouseDown(MouseEventArgs e) 
            { 
                base.OnMouseDown(e); 
                if (link != null && OnClickUser != null) 
                { 
                    OnClickUser(this, new LinkClickedEventArgs(link)); 
                } 
            } 
        }