2017-09-13 58 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