2016-02-02 31 views
2

我有一個組合表單來獲取客戶和按鈕。 選擇客戶並將鼠標移到按鈕上時,會顯示一個工具提示,其中包含有關該客戶的信息。使用MouseOver事件時會顯示幾個工具提示文本

我已經使用ToolTip_Draw自定義了工具提示。

所有這些工作正常。

問題是,當我更改de選定的客戶,然後將鼠標移動到按鈕上時,會顯示幾個工具提示文本。一個用於我之前選擇的每個客戶。

我試圖以某種方式清空德工具提示,但似乎沒有工作。

private void bttCitas_MouseHover(object sender, EventArgs e) 
{ 
    string mSQL = @" SELECT one, two, three 
      FROM customers 
      WHERE id = " + comboCliente.SelectedValue + ";"; 
    DataTable tablaTemp = retrieveData(mSQL); 

    string customerText = ConvertDataTableToString(tablaTemp); 
    System.Windows.Forms.ToolTip Emergente = new System.Windows.Forms.ToolTip(); 
    Emergente.OwnerDraw = true; 
    Emergente.Draw += new DrawToolTipEventHandler(ToolTip_Draw); 
    Emergente.AutoPopDelay = 150000; 
    Emergente.InitialDelay = 500; 
    Emergente.ReshowDelay = 500; 
    Emergente.SetToolTip(this.bttCitas, customerText);    
} 


void ToolTip_Draw(object sender, DrawToolTipEventArgs e) 
{ 
    using (e.Graphics) 
    { 
     Font f = new Font("Courier New", 9.0f); 
     e.DrawBackground(); 

     e.DrawBorder(); 
     SolidBrush myBrush = new SolidBrush(GLOBALToolTipFontColor);     
     e.Graphics.DrawString(e.ToolTipText, f, myBrush, new PointF(2, 2)); 
    } 
} 
+0

雖然我不能查明原因,我一定會移動工具提示創建到,除發生頻率較低的事件mouse_hover;可能到您更新客戶的代碼。這樣,每次將鼠標移到按鈕上時,您都會完成一個完整的數據庫,只能一次又一次地檢索相同的信息,並創建更多的工具提示實例。 – SJuan76

回答

0

我終於想通了會發生什麼。

我需要聲明興起的出鼠標懸停事件,然後處理它在鼠標離開:

private ToolTip Emergente; 

private void bttCitas_MouseHover(object sender, EventArgs e) 
{ 
    string mSQL = @" SELECT one, two, three 
      FROM customers 
      WHERE id = " + comboCliente.SelectedValue + ";"; 
    DataTable tablaTemp = retrieveData(mSQL); 

    string customerText = ConvertDataTableToString(tablaTemp); 
    Emergente = new System.Windows.Forms.ToolTip(); 
    Emergente.OwnerDraw = true; 
    Emergente.Draw += new DrawToolTipEventHandler(ToolTip_Draw); 
    Emergente.AutoPopDelay = 150000; 
    Emergente.InitialDelay = 500; 
    Emergente.ReshowDelay = 500; 
    Emergente.SetToolTip(this.bttCitas, customerText);    
} 


void ToolTip_Draw(object sender, DrawToolTipEventArgs e) 
{ 
    using (e.Graphics) 
    { 
     Font f = new Font("Courier New", 9.0f); 
     e.DrawBackground(); 

     e.DrawBorder(); 
     SolidBrush myBrush = new SolidBrush(GLOBALToolTipFontColor);     
     e.Graphics.DrawString(e.ToolTipText, f, myBrush, new PointF(2, 2)); 
    } 
} 


private void bttCitas_MouseLeave(object sender, EventArgs e) 
{ 
     Emergente.Dispose(); 
}