首页 > 解决方案 > 如何在放置在 Winform 按钮上的透明图像上显示工具提示

问题描述

我在按钮控件的右上角显示一个红色三角形的透明图标 (32x32),表示存在错误。此外,当用户将鼠标悬停在图标上时,会显示一个工具提示。

我已经能够显示图标和相关的工具提示。问题是一个透明的 32x32 图标,红色三角形只有 12x12。工具提示应该只在悬停在红色三角形而不是透明空间上时触发。

已尝试将三角形显示为按钮和图片框,但工具提示仍会在透明空间中触发。此外,错误提供程序首先被用作我想要完成的目标。

界面项目:

内置的错误提供程序控件实现了我想要复制的期望结果。这样做将允许更健壮的应用程序具有比错误提供程序提供的更多自定义功能。

标签: c#imagewinforms

解决方案


根据@TaW 的 GetPixel 建议,我做了进一步的研发,现在有了一些功能。图片框的标签包含要显示的工具提示消息。由于图片框是鼠标移动的“发送者”,因此很容易将图像提取回位图。

感谢大家的反馈。

首先,我将测试切换为使用带有 PictureBox 的 CreateErrorControl2 并添加到 MouseMove。

    private PictureBox CreateErrorControl2(string name) //, Control control)
    {
        var errorIcon = new PictureBox();
        errorIcon.Name = name;
        errorIcon.Size = new Size(32, 32);
        errorIcon.Cursor = Cursors.Default;
        errorIcon.BackColor = Color.Transparent;
        errorIcon.Visible = false;
        errorIcon.MouseMove += new MouseEventHandler(DisplayToolTip);

        return errorIcon;
    }

还添加了以下代码以支持 DisplayToolTip 方法。

    private bool _toolTipShown = false;

    private bool IsTransparent(PictureBox pb, MouseEventArgs e)
    {
        Color pixel = ((Bitmap)pb.Image).GetPixel(e.X, e.Y);
        return (0 == pixel.A && 0 == pixel.R && 0 == pixel.G && 0 == pixel.B);
    }

    private void DisplayToolTip(object sender, MouseEventArgs e)
    {
        Control control = (Control)sender;
        IsTransparent((PictureBox)control, e);
        if (IsTransparent((PictureBox)control, e))
        {
            _toolTip.Hide(control);
            _toolTipShown = false;
        }
        else
        {
            if (!_toolTipShown)
            {
                _toolTip.Show(control.Tag.ToString(), control);
                _toolTipShown = true;
            }
        }
    }

推荐阅读