工程中有一richtextbox控件,现在想:在其内容中选取特定格式文字,比如8位连续数字,高亮并加鼠标点击事件。
指的是点击高亮文字产生事件
指的是点击高亮文字产生事件
解决方案 »
- .NET开发面试[非技术贴]
- 自己写的ResourceDictionary
- 飞信点net接口文件FetionObj.dll及FetionSer.dll哪有下载
- C# 工作线程如何通知主线程
- Winform Vscrollbar的一个问题
- WEB 里面对话框提示“确定”和“取消”的功能的老问题,高手帮忙看看!
- 有关ACCESS的奇怪问题!!
- datagridview数据复制 string插入datagridview
- OleDbCommand和OleDbTableAdapter究竟是怎么分工和工作的,哪位给我详细讲解一下
- 客户端与服务器端数据接收
- 如何实现DataGridView行位置改变前的事件?
- 关于做一个软件需求分析[在线]
lz可以到网上搜搜其他TXT控件有实现这功能的没
{
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);
}
}
}
}
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));
}
}
}
}
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));
}
}
}
}