当前位置: 首页 > 知识库问答 >
问题:

工具提示仅在移动鼠标后显示

贾飞章
2023-03-14

我在使用mousemove事件显示工具提示时遇到了一些麻烦。基本上,当我的鼠标指针在图片框的某些区域上时,我想显示一个工具提示。我试图使用mousemove事件来完成此操作,确定阉羊指针位于最佳位置,并(如果是这样)使用settools tip设置工具提示。

这是我的mousemove事件(我注意到,当显示工具提示时,mousemove会持续触发,我会检查位置是否真的发生了变化)

private void pbFaseFlow_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Location != OldPosition)
    {
        OldPosition = e.Location;

        // determine text for tooltip (gets loaded into a global string)
        DetermineText(Position);

        // show the coords and tooltip text for debugging in some textbox
        tbInfo.Text = e.X.ToString() + " " + e.Y.ToString() + " " + ToolTipText;

        // show tooltip
        if (ToolTipText != string.Empty)
        {
            toolTip.SetToolTip(pbFaseFlow, ToolTipText);
            toolTip.Active = true;
        }
        else
        {
            toolTip.Active = false;
        }
    }
}

这工作正常,除了当我将鼠标移动到第一个像素的甜蜜点时。在我的文本框中,我可以看到文本正在确定(例如“测试”f. e.),但工具提示不显示。只有在我将鼠标再移动1个像素后,工具提示才会显示。这是一个问题,因为在甜蜜点上可能只有1像素宽,所以当鼠标从左向右移动时,工具提示不会显示(当向上/向下移动时,它会显示...)

即使我没有检查一个真正改变了的位置(我省略了e.location检查),工具提示也不会显示,直到我再移动鼠标1个像素。

我注意到,如果我从不使工具提示不活动,它确实有效,但我不希望任何东西显示在甜蜜点之外...

这里发生了什么?

----------编辑--------------

更多信息:

当我把代码改成这个(基本上总是显示工具提示,除了现在没有信息时只有一个空格),工具提示会立即更新。缺点是,我现在有一个空的工具提示,当没有数据显示时,它会一直显示出来,非常烦人。

            // show tooltip
            if (ToolTipText != string.Empty)
            {
                toolTip.Active = true;
                toolTip.SetToolTip(pbFaseFlow, ToolTipText);
            }
            else
            {
                toolTip.Active = true;
                ToolTipText = " ";
                toolTip.SetToolTip(pbFaseFlow, " ");
            }

共有2个答案

西门靖琪
2023-03-14

我有一个非常相似的问题。我正在使用TrackMouseEvent()重新启用MouseHover,这样我就不必将鼠标移出控件并返回以获取另一个悬停事件来触发工具提示。

它第一次正常工作,但在鼠标移动1个像素之前,后续显示工具提示的尝试不会发生。

我的解决办法是调用Show()两次。我还需要将工具提示稍微偏离鼠标位置。

toolTip1.Show("Hi There", Parent, e.X + 5, e.Y + 5, 2000);
toolTip1.Show("Hi there", Parent, e.X + 5, e.Y + 5, 2000);
梁丘柏
2023-03-14

看起来你缺少工具提示。Show()方法。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Point OldPosition = new Point(0, 0);
        private Point ptSweetSpot = new Point(30, 30);
        private List<Point> sweetPointArea = new List<Point>() 
            { new Point(60, 60), new Point(60, 61), 
              new Point(61, 60), new Point(61, 61)
            };

        public Form1()
        {
            InitializeComponent();

            pbFaseFlow.MouseMove += pbFaseFlow_MouseMove;

            //just to see it on pictureBox
            Bitmap myBitmap = new Bitmap(pbFaseFlow.Height, pbFaseFlow.Width);
            myBitmap.SetPixel(ptSweetSpot.X, ptSweetSpot.Y, Color.Red);

            foreach (Point p in sweetPointArea)
            {
               myBitmap.SetPixel(p.X, p.Y, Color.Green);
            }

            pbFaseFlow.Image = myBitmap;
        }
        private void pbFaseFlow_MouseMove(object sender, MouseEventArgs e)
        {
            if (!e.Location.Equals(OldPosition))
            {
                OldPosition = e.Location;

                // show the coords and tooltip text for debugging in some textbox
                tbInfo.Text = e.X.ToString() + " " + e.Y.ToString();

                //are we inside sweet area?
                if (sweetPointArea.Contains(e.Location))
                {
                    toolTip.Active = true;
                    toolTip.SetToolTip(pbFaseFlow, "hello from sweet area!");
                    toolTip.Show(toolTip.GetToolTip(pbFaseFlow), pbFaseFlow, pbFaseFlow.Width / 2, pbFaseFlow.Height / 2);
                }
                //no? so maybe we're over sweet spot?
                else if (e.Location.Equals(ptSweetSpot)) 
                {
                    toolTip.Active = true;
                    toolTip.SetToolTip(pbFaseFlow, "hello from sweet point!");
                    toolTip.Show(toolTip.GetToolTip(pbFaseFlow), pbFaseFlow, pbFaseFlow.Width / 2, pbFaseFlow.Height / 2);                }
                //no? ok, so disable tooltip
                else
                {
                    toolTip.Active = false;
                }
            }
        }
    }
}
 类似资料:
  • 我想用鼠标在表格中的图像上显示工具提示。请找到小提琴样品http://jsfiddle.net/FpBu4/42/我想用鼠标在图像的右上方显示工具提示。下面是示例脚本: 请建议如何在图像上的鼠标上显示图像附近的工具提示。谢谢

  • 我正在用chart.js实现一些点图。没有问题,但我想做的是有一个工具提示,不只是附加到给定的数据点。现在,您可以创建一个工具提示,它将在图表上给定数据点附近显示一个弹出窗口。例如,如果我有数据点[1,5]、[2,6]和[3,7],它将很高兴地显示这三个数据点。 但我想要的是,当我在1,5到2,6之间时,看看我在x轴上的确切位置。1.5,1.6等。 但这是x和y在画布上的位置,与实际的x和y图形坐

  • 我希望鼠标悬停在节点上时,工具提示显示在鼠标旁边。我尝试了我在上找到的解决方案,但到目前为止,只有Boxun的解决方案起到了作用,尽管这并不是我想要的(D3.js:使用元素位置来定位工具提示,而不是鼠标位置?)。 我想知道为什么在我的听众功能中, ,功能 或者 显示在svg的顶部,而不是鼠标所在的位置。 通过阅读上面链接的答案,我认为我必须以某种方式转换坐标,但我无法使其工作。

  • 本文向大家介绍asp.net中GridView数据鼠标移入显示提示信息,包括了asp.net中GridView数据鼠标移入显示提示信息的使用技巧和注意事项,需要的朋友参考一下 问题提出: 在asp.net开发中,如果有这样的一个需求,如果在列表控件,如GridView中的某列中显示的是一个计算公式得出的值,那么需求来了,鼠标移入该数字,显示该数字的计算公式和过程,如何做? 解决方案分析: 常规可以

  • 我想在页面加载时显示1个工具提示,然后在几秒钟后隐藏它和/或在另一个工具提示悬停时隐藏它。 我已经找到了几种方法来做到这一点,但我使用了一个Elementor插件作为我的工具提示,所以它嵌套在几个div中,这让我感到困惑。 当您悬停在“div.eael-tooltip”上时-“span.eael-tooltip-text”显示(这是我想自动显示几秒钟的内容) 我知道我可能需要一些jQuery,有谁