2017-09-13 60 views
0

我创建了自定义工具提示,但我需要的是它将具有与系统绘制它时相同的样式,而不打开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

我需要同样的提示确切地显示在另一个控制,但作画,让说,在第二行“亚历克斯会议:连接”用红色。

+0

这是更好地展示你做了什么的。一些示例代码... – saeed

+0

@saeed我已经更新了我的问题。我需要相同的功能(如系统默认),但能够随心所欲地绘制文本。 –

+0

什么是ttSessionInfo的基类 – saeed

回答

0

我添加了一个重新实现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

+0

@Geka P这个帖子对你有用,如果不让我删除它。 – saeed