Если вы можете кодировать MouseMove
и MouseClick
события, которые вы можете добавить 64 ссылок на почти любой RichTextBox RTB
:
Dictionary<int, string> links = new Dictionary<int, string>();
private void cb_insertLink_Click(object sender, EventArgs e)
{
int index = links.Count;
RTB.SelectionColor = LinkColor(index); // calculate color from index
RTB.SelectionFont = new Font(RTB.SelectionFont, FontStyle.Underline);
RTB.SelectedText = tb_text.Text;
links.Add(index, tb_link.Text);
}
private void RTB_MouseMove(object sender, MouseEventArgs e)
{
int charPos = RTB.GetCharIndexFromPosition(e.Location);
int sst = RTB.SelectionStart;
RTB.SelectionStart = charPos;
Color cs = RTB.SelectionColor; // grab the color at the mouse pos
RTB.SelectionStart = sst;
Cursor = OverLink(cs) < 65 ? Cursors.Hand : RTB.Cursor;
}
private void RTB_MouseClick(object sender, MouseEventArgs e)
{
int linkId = OverLink(RTB.SelectionColor);
if (linkId < 65 && links.Keys.Contains(linkId))
System.Diagnostics.Process.Start(links[linkId]);
}
int OverLink(Color col)
{
int linkId = 255 - col.B; // the link id is the offset from Blue
if (linkId == col.R && col.G == linkId) return linkId; else return 255;
}
Color LinkColor(int index) { return Color.FromArgb(255, index, index, 255 - index); }
Вот как это работает: в cb_insertLink_Click
события происходят две вещи: Тексты двух TextBoxes
используются для
- добавить текст в он текущей позиции курсора
- добавить ссылку на словарь
Текст и ссылка объединены специальным оттенком синего цвета, который используется для цветного текста и в качестве ключа в словаре.
Идентификаторы MouseMove
и MouseClick
добавлены для отображения указателя руки и запуска процесса, который может открыть ссылку.
Текст ссылки может быть отредактирован свободно и будет работать, пока цвет не будет изменен.
До сих пор не существует метода очистки, чтобы избавиться от осиротевших записей в словаре ссылок.
Я закодировал предел 64 оттенков, чтобы держать вещи в том же цветовом диапазоне ..
Добавление кода для редактирования ссылок не должно быть никаких проблем для вас.
Я не уверен, что это поможет вам с тех пор, как вы используете RichTextBoxEx
, но на самом деле он не использует никаких экзотических функций.
Что вы имеете в виду, что вы не можете его использовать .. Можете ли вы показать, что у вас есть или что вы используете до сих пор .. на основе метода перегружает код, который имеет код в ссылке, вы можете использовать его .. но я только догадываюсь здесь, так как вы не предоставили и фактический пример кода, относящийся к вашей текущей проблеме. – MethodMan
Нет кода для предоставления, я не могу заменить свой RichTextBoxEx, потому что он исходит из DotNetBar и предоставляет множество функций. Если я заменил его на RichTextBoxLinks, который я нашел, я не смогу использовать функции, включенные в предыдущий RichTextBox. – Gamma
смотрите здесь, как это сделать с помощью RichTextBox http://stackoverflow.com/questions/435607/c-sharp-how-can-i-make-a-hyperlink-work-in-a-richtextbox – MethodMan