我有一个包含字符串的RichTextBox
,例如:" Hello",当我将鼠标悬停在单词上时,我想创建一个新事件" Hello&#34 ;或者为了简化这一点,将鼠标悬停在单词" Hello"上时显示一个消息框。那么如何实现呢?
答案 0 :(得分:2)
首先,让我们定义一个方法,使单词最接近光标:
public static class Helper
{
public static string GetWordUnderCursor(RichTextBox control, MouseEventArgs e)
{
//check if there's any text entered
if (string.IsNullOrWhiteSpace(control.Text))
return null;
//get index of nearest character
var index = control.GetCharIndexFromPosition(e.Location);
//check if mouse is above a word (non-whitespace character)
if (char.IsWhiteSpace(control.Text[index]))
return null;
//find the start index of the word
var start = index;
while (start > 0 && !char.IsWhiteSpace(control.Text[start - 1]))
start--;
//find the end index of the word
var end = index;
while (end < control.Text.Length - 1 && !char.IsWhiteSpace(control.Text[end + 1]))
end++;
//get and return the whole word
return control.Text.Substring(start, end - start + 1);
}
}
如果光标位于MouseMove
之上并且最近的单词为RichTextBox
,则仅为了引发"Hello"
事件,您需要定义自己的控件来自{{1}并覆盖RichTextBox
方法,并在表单中使用它OnMouseMove
:
RichTextBox
但是,在我看来,让public class MyRichTextBox : RichTextBox
{
protected override void OnMouseMove(MouseEventArgs e)
{
//get the word under the cursor
var word = Helper.GetWordUnderCursor(this, e);
if (string.Equals(word, "Hello"))
{
//let RichTextBox raise the event
base.OnMouseMove(e);
}
}
}
正常提升RichTextBox
事件并在条件得到满足时采取行动会更好。为此,您只需注册MouseMove
处理程序并检查条件:
MouseMove
答案 1 :(得分:0)
我认为您可以使用Cursor class来实现这一目标。有些人试图达到类似的目的。看看here。
答案 2 :(得分:-1)
确保您有一个事件'richTextBox1_MouseHover'连接到Rich Text Box的悬停。
private void richTextBox1_MouseHover(object sender, EventArgs e)
{
MessageBox.Show("Hello");
}