自定义绘图的重复工具提示样式和大小

时间:2017-09-13 14:22:30

标签: c# vb.net winforms tooltip

我创建了自定义工具提示,但我需要的是,当你不打开OwnerDraw标志时,它将与系统绘制它的样式相同。 如何创建与"原始"完全相同的自定义工具提示?一个?

ttSessionInfo.ToolTipTitle = UiTranslator.Instance.GetLabel(UiLabels.DC_DSE_Session);

var toolTipSessionsText = sessions.Aggregate(
                        new StringBuilder(),
                        (p_strBuilder, p_session) => p_strBuilder.AppendLine(string.Format("{0}: {1}", p_session.SessionName,
                            p_session.IsConnected ? connectedText : disconnectedText))).ToString();

ttSessionInfo.SetToolTip(LiveUpdatePb, toolTipSessionsText);

结果是:

This looks like

我需要完全相同的工具提示才能显示在另一个控件上,但是要绘制,比方说,第二行" Alex会话:已连接"红色。

1 个答案:

答案 0 :(得分:2)

我添加了一个重新实现ToolTip类和代码的示例以使用它。

课程:

class CustomToolTip : ToolTip
    {
        public CustomToolTip()
        {
            this.OwnerDraw = true;
            this.Popup += new PopupEventHandler(this.OnPopup);
            this.Draw += new DrawToolTipEventHandler(this.OnDraw);
        }

        string m_EndSpecialText;
        Color m_EndSpecialTextColor =Color.Red;

        public Color EndSpecialTextColor
        {
            get { return m_EndSpecialTextColor; }
            set { m_EndSpecialTextColor = value; }
        }

        public string EndSpecialText
        {
            get { return m_EndSpecialText; }
            set { m_EndSpecialText = value; }
        }

        private void OnPopup(object sender, PopupEventArgs e) // use this event to set the size of the tool tip
        {
            e.ToolTipSize = new Size(200, 100);
        }

        private void OnDraw(object sender, DrawToolTipEventArgs e) // use this event to customise the tool tip
        {
            Graphics g = e.Graphics;

            LinearGradientBrush b = new LinearGradientBrush(e.Bounds,
                Color.GreenYellow, Color.MintCream, 45f);

            g.FillRectangle(b, e.Bounds);

            g.DrawRectangle(new Pen(Brushes.Red, 1), new Rectangle(e.Bounds.X, e.Bounds.Y,
                e.Bounds.Width - 1, e.Bounds.Height - 1));

            //g.DrawString(e.ToolTipText, new Font(e.Font, FontStyle.Bold), Brushes.Silver,
            //    new PointF(e.Bounds.X + 6, e.Bounds.Y + 6)); // shadow layer
            g.DrawString(e.ToolTipText, new Font(e.Font, FontStyle.Bold), Brushes.Black,
                new PointF(e.Bounds.X + 5, e.Bounds.Y + 5)); // top layer

            SolidBrush brush = new SolidBrush(EndSpecialTextColor);

            g.DrawString(EndSpecialText, new Font(e.Font, FontStyle.Bold), brush,
                new PointF(e.Bounds.X + 5, e.Bounds.Bottom - 15)); // top layer

            brush.Dispose();
            b.Dispose();
        }
    }

使用上述课程后

private void button1_Click(object sender, EventArgs e)
    {
        CustomToolTip toolTip1 = new CustomToolTip();
        toolTip1.ShowAlways = true;
        toolTip1.SetToolTip(button1, "Click me to execute.");
        toolTip1.EndSpecialText = "Hello I am special";
    }

enter image description here