当前位置: 首页 > 编程语言 > C#

在鼠标悬停时显示工具提示TextShare

时间:2023-04-11 01:33:36 C#

在鼠标悬停文本时显示工具提示我想在鼠标悬停在自定义丰富编辑控件中的链接上时显示工具提示。考虑以下文本:我们都在晚上睡觉。就我而言,睡眠这个词是一个链接。当用户将鼠标移动到链接下方时,在本例中为“休眠”,我想显示链接的工具提示。以下是我的想法,但它们没有用1)CatchOnMouseHoverif(this.Cursor==Cursors.Hand)tooltip.Show(textbox,"Mytooltip");否则工具提示。隐藏(文本框);但这没有用。更新提到的链接不是URL,即这些是自定义链接,因此Regex在这里没有多大帮助,它可以是任何文本。用户可以选择创建链接。虽然我没有尝试过GetPosition方法,但我认为它在设计和维护方面不会那么优雅。假设我晚上睡觉时在我的richedit框中有以下行。但是蝙蝠一直醒着。蟑螂在夜间变得活跃。在上面的句子中,当鼠标悬停在它们上面时,我想要三个不同的工具提示。睡眠->人类醒了->守夜人在这里活动->我的一天开始了我按如下方式卡住OnMouseMove:我担心为什么不显示工具提示if(this.Cursor.current==Cursors.hand){Messagebox.show("youareunderalink");}}不起作用-使用工具提示-工具提示不显示OnMouseMove(MouseventArgse){if(cursor.current==cursors.hand){tooltip.show(richeditbox,ex,ey,1000);好的,检查一下,这有效,如果您有问题请告诉我:usingSystem.Drawing;使用System.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}ToolTiptip=newToolTip();voidrichTextBox1_MouseMove(objectsender,MouseEventArgse){if(!timer1.Enabled){stringlink=GetWord(richTextBox1.Text,richTextBox1.GetCharIndexFromPosition(e.Location));//检查当前单词是否是URL,change正则表达式到任何你想要的,我在www.regexlib.com上找到它。//你也可以检查当前单词是否是粗体、下划线等,但我没有深入研究它。如果(System.Text.RegularExpressions.Regex.IsMatch(链接,@"^(http|https|ftp)://[a-zA-Z0-9-.]+.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9-._?,'/\+&%$#=~])*$")){tip.ToolTipTitle=链接;点p=richTextBox1.Location;tip.Show(link,this,pX+eX,pY+eY+32,//您可以将它(35)更改为工具提示的高度-控制工具提示的位置。1000);timer1.Enabled=true;}}}privatevoidtimer1_Tick(objectsender,EventArgse)//定时器用于控制工具提示,它不应该在每次鼠标移动时重绘。{timer1.Enabled=false;}publicstaticstringGetWord(stringinput,intposition)//提取鼠标当前关注的整个单词。{字符s=输入[位置];intsp1=0,sp2=input.Length;对于(inti=position;i>0;i--){charch=input[i];如果(ch==''||ch=='n'){sp1=i;休息;}}for(inti=position;我只是将工具箱中的工具提示工具添加到表单中,并将此代码添加到任何控件的mousemove事件中,以便在其鼠标移动时启动工具提示privatevoidtextBox3_MouseMove(objectsender,MouseEventArgse){toolTip1.SetToolTip(textBox3,"Tooltiptext");//你可以在任何你想要关注的控件上更改第一个参数(textbox3)}希望这能帮助你平静你不应该使用控件私有工具提示,而是形成一个这个例子效果很好:publicpartialclassForm1:Form{privateSystem.Windows.Forms.ToolTiptoolTip1;publicForm1(){InitializeComponent();this.components=newSystem.ComponentModel.Container();this.toolTip1=newSystem.Windows.Forms.ToolTip(this.components);MyRitchTextBoxmyRTB=newMyRitchTextBox();this.Controls.Add(myRTB);myRTB.Location=newPoint(10,10);myRTB.MouseEnter+=newEventHandler(myRTB_MouseEnter);myRTB.MouseLeave+=newEventHandler(myRTB_MouseLeave);}voidmyRTB_MouseEnter(objectsender,EventArgse){MyRitchTextBoxrtb=(senderasMyRitchTextBox);if(rtb!=null){this.toolTip1.Show("你好!!!",rtb);}}voidmyRTB_MouseLeave(objectsender,EventArgse){MyRitchTextBoxrtb=(senderasMyRitchTextBox);如果(rtb!=null){this.toolTip1.Hide(rtb);}}publicclassMyRitchTextBox:RichTextBox{}}这不是很优雅,但您可以使用RichTextBox.GetCharIndexFromPosition方法返回鼠标当前所在字符的索引,然后使用它来确定它是否在链接上、热点或任何其他特殊区域。如果是,显示您的工具提示(并且您可能希望将鼠标坐标传递给工具提示的Show方法,而不是仅仅传递文本框,以便工具提示可以放在链接旁边)。示例:http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.getcharindexfromposition(VS.80).aspx使用:ToolTiptip=newToolTip();privatevoidrichTextBox1_MouseMove(objectsender,MouseEventArgse){Cursora=System.Windows.Forms.Cursor.Current;if(a==Cursors.Hand){点p=richTextBox1.Location;tip.Show(GetWord(richTextBox1.Text,richTextBox1.GetCharIndexFromPosition(e.Location)),this,pX+eX,pY+eY+32,1000);使用我的其他答案中的GetWord函数获取悬停词。如上所述,使用计时器逻辑禁用重新显示工具提示。例子。在上面的示例中,工具提示通过检查鼠标指针显示单词悬停。如果这个答案仍然不是你想要的,请指定你想要使用工具提示的词的特征标准。如果您想要粗体字,请告诉我。我还想在这里添加一些内容,如果您在程序运行之前加载包含工具提示控件的所需表单,该表单上的工具提示控件将不会像下面描述的那样工作...[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);objfrmmain=newFrm_Main();Showtop();//这是program.cs中加载其他表单的过程,因此如果包含工具提示控件,则它将不起作用Application.Run(objfrmmain);所以我通过将以下代码放在Fram_main_load事件过程中来解决这个问题privatevoidFrm_Main_Load(objectsender,EventArgse){由于这个问题(但它的年龄)解决方案中没有任何东西需要Windows.Forms,所以这里是如何在代码隐藏的WPF中做到这一点。TextBlocktb=newTextBlock();tb.Inlines.Add(newRun("背景指示数据包重复状态:"));tb.Inlines.Add(newLineBreak());tb.Inlines.Add(newLineBreak());Runr=newRun("白");r.Background=Brushes.White;r.ToolTip="这个词有白色背景";tb.Inlines.Add(r);tb.Inlines.Add(newRun("t=此时收到相同的数据包。"));tb.Inlines.Add(newLineBreak());r=newRun("天蓝");r.ToolTip="ThiswordhasaSkyBluebackground";r.Background=newSolidColorBrush(Colors.SkyBlue);tb.Inlines.Add(r);tb.Inlines.Add(newRun("t=此时收到原始数据包。"));myControl.Content=tb;如果您使用的是RichTextBox控件。您可以简单地定义一个ToolTip对象,并在通过在RichTextBox控件内移动鼠标选择文本时显示工具提示。工具提示m_ttInput=newToolTip();//定义为成员变量privatevoidrtbInput_SelectionChanged(objectsender,EventArgse){if(rtbInput.SelectedText.Length>0){m_ttInput.Show(rtbInput.SelectedText.Length.ToString(),rtbInput,1000);}}为了便于使用和理解。您只需将工具提示放在窗体上的任意位置(从工具箱中)。然后,您将在表单中的所有其他属性中获得一个选项,以确定在该工具提示中显示的内容(它会说类似“ToolTip1上的ToolTip”)。每当您将鼠标悬停在对象上时,此属性中的文本将显示为工具提示。这不包括原始问题要求的自定义动态工具提示。但我把它留给不需要它的其他人。以上是C#学习教程:当鼠标悬停在文本上时,显示tooltip,分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家分享注意---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: