Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在控件的不同区域显示不同的工具提示_C#_Winforms - Fatal编程技术网

C# 如何在控件的不同区域显示不同的工具提示

C# 如何在控件的不同区域显示不同的工具提示,c#,winforms,C#,Winforms,我试图显示不同的工具提示文本,这取决于用户将鼠标放在控件的哪个部分。作为一个简化的示例,如果用户将鼠标悬停在左半部,则显示“Left”;如果用户将鼠标悬停在右半部,则显示“Right”: public partial class TestForm : Form { private ToolTip toolTip = new ToolTip(); public TestForm() { InitializeComponent(); } priva

我试图显示不同的工具提示文本,这取决于用户将鼠标放在控件的哪个部分。作为一个简化的示例,如果用户将鼠标悬停在左半部,则显示“Left”;如果用户将鼠标悬停在右半部,则显示“Right”:

public partial class TestForm : Form
{
    private ToolTip toolTip = new ToolTip();

    public TestForm() {
        InitializeComponent();
    }

    private void TestForm_MouseMove(object sender, MouseEventArgs e) {
        if (e.X < Width / 2) {
            toolTip.SetToolTip(this, "Left");
        } else {
            toolTip.SetToolTip(this, "Right");
        }
    }
}
公共部分类TestForm:Form
{
专用工具提示工具提示=新工具提示();
公共测试表单(){
初始化组件();
}
私有void TestForm_MouseMove(对象发送方,MouseEventArgs e){
如果(e.X<宽度/2){
设置工具提示(这个“左”);
}否则{
设置工具提示(这个“右”);
}
}
}

问题在于,这会导致工具提示立即显示,并跟随光标四处移动。有没有办法让它表现得像不同的区域是独立的控件?

您可以添加计时器,当鼠标未移动时,它会在延迟时触发工具提示

添加具有一定间隔的计时器,例如1000毫秒(1秒)

当鼠标移动时,它应该运行

private void TestForm_MouseMove(object sender, MouseEventArgs e) {
    //if (e.X < Width / 2) {
    //    toolTip.SetToolTip(this, "Left");
    //} else {
    //    toolTip.SetToolTip(this, "Right");
    //}

    timer1.Stop();
    timer1.Start();
}
private void TestForm\u MouseMove(对象发送方,MouseEventArgs e){
//如果(e.X<宽度/2){
//设置工具提示(这个“左”);
//}否则{
//设置工具提示(这个“右”);
//}
timer1.Stop();
timer1.Start();
}
如果停止,则触发工具提示

private void timer1_Tick(object sender, EventArgs e)
{
    timer1.Stop();

    if (PointToClient(Cursor.Position).X < this.Width / 2)
    {
        toolTip.SetToolTip(this, "Left");
    }
    else
    {
        toolTip.SetToolTip(this, "Right");
    }
}
private void timer1\u勾选(对象发送方,事件参数e)
{
timer1.Stop();
if(指向客户端(游标位置).X
如何在当前鼠标位置@user2316116设置工具提示我不希望它立即显示出来。我希望工具提示通常的悬停延迟,你可能想考虑使用计时器和标签,并自己编码,因为你想要的行为与标准的工具提示有很大的不同。
private void timer1_Tick(object sender, EventArgs e)
{
    timer1.Stop();

    if (PointToClient(Cursor.Position).X < this.Width / 2)
    {
        toolTip.SetToolTip(this, "Left");
    }
    else
    {
        toolTip.SetToolTip(this, "Right");
    }
}