Richtextbox mousemove event文本的颜色是

问题描述:

有没有办法使用mousemove事件来确定文本在RichTextBox中的颜色?我想避免使用Richtextbox.Select,因为它在鼠标移动的任何位置添加了一个小选择栏。Richtextbox mousemove event文本的颜色是

private void rtbComputerstatus_MouseMove(object sender, MouseEventArgs e) 
{ 
    int c = rtbComputerstatus.GetCharIndexFromPosition(new Point(e.X, e.Y)); 

    rtbComputerstatus.Select(c, 1); 

    if (rtbComputerstatus.SelectionColor == Color.Blue) 
     rtbComputerstatus.Cursor = Cursors.Hand; 
    else 
     rtbComputerstatus.Cursor = Cursors.Default; 
} 
+0

如果你改变'rtbComputerstatus.Select(C,1);''来rtbComputerstatus.Select(C,0);'那么你至少没有得到大的蓝色选择框,即使你在你的鼠标周围的盒子上贴上脱字符。 – Adrian 2013-05-10 02:20:58

+0

这可能会起作用,只有在富文本框内部时,才有办法隐藏插入符号? – Boundinashes6 2013-05-10 03:29:38

+0

可能。我知道它可以使用Windows API完成。老实说,你最好马克霍尔的解决方案。 – Adrian 2013-05-10 03:35:42

只是在黑暗中一枪,但会下面的工作?

private void rtbComputerstatus_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (rtbComputerstatus.ForeColor.ToKnownColor() == KnownColor.Blue) 
      rtbComputerstatus.Cursor = Cursors.Hand; 
     else 
      rtbComputerstatus.Cursor = Cursors.Default; 
    } 

我认为这将检查刚刚选定的文本:

private void rtbComputerstatus_MouseMove(object sender, MouseEventArgs e) 
    { 

     if (rtbComputerstatus.SelectionColor.ToKnownColor() == KnownColor.Blue) 
      rtbComputerstatus.Cursor = Cursors.Hand; 
     else 
      rtbComputerstatus.Cursor = Cursors.Default; 

    } 
+0

我可能是错的,但我认为'ForeColor'是RichTextBox的全局属性。它不会给你那个位置的颜色。 – Adrian 2013-05-10 02:19:54

+0

我编辑了我的答案,为选定的文本添加检查。 – sous2817 2013-05-10 02:22:32

+0

不幸的是,这正是他试图避免在他原来的问题。 – Adrian 2013-05-10 02:23:07

你可以尝试这样的事情,从这个MSDN Forum answer of JoOls修改,它会给你的鼠标下的像素的颜色。

private void rtbComputerstatus_MouseMove(object sender, MouseEventArgs e) 
{ 
    Point cursorPoint = Cursor.Position; 
    Bitmap bm = new Bitmap(1, 1); 
    Graphics g = Graphics.FromImage(bm); 
    g.CopyFromScreen(cursorPoint, new Point(), new Size(1, 1)); 
    Color pixelColor = bm.GetPixel(0, 0); 
    g.Dispose(); 
    bm.Dispose(); 
    if (pixelColor.ToArgb().Equals(Color.Blue.ToArgb())) 
    { 
     if (rtbComputerstatus.Cursor != Cursors.Hand) 
      rtbComputerstatus.Cursor = Cursors.Hand; 
    } 
    else 
    { 
     if(rtbComputerstatus.Cursor != Cursors.Default) 
      rtbComputerstatus.Cursor = Cursors.Default; 
    } 
} 
+0

+1这工作时,我在本地测试。当你发布它时,我试图找出这样的解决方案。 – Adrian 2013-05-10 02:36:49

+0

感谢Mark,当我的鼠标移动到Richtextbox中的蓝色像素上时工作,但当鼠标移动到字母之间的空白区域时,它会返回到正常光标。它似乎是像素太精确,会增加位图(1,1)增加其“大小”? – Boundinashes6 2013-05-10 02:54:59

+0

是的,但即使你是你还只是测试1像素,在这种情况下,左上角。你需要检查所有的人,看看大多数是蓝色的。我正在尝试解决方案,可以降低MouseMove Logic – 2013-05-10 03:01:05