C# 使用鼠标悬停事件时会显示多个工具提示文本
我有一张表格,上面有一个选择客户的组合和一个按钮。 选择客户并将鼠标移到按钮上时,将显示工具提示,其中包含有关该客户的信息 我已经使用tooltip\u Draw自定义了工具提示 所有这些都很好 问题是,当我更改取消选择的客户,然后将鼠标移到按钮上时,会显示几个工具提示文本。我以前选择的每个客户都有一个 我试图以某种方式清空工具提示,但似乎没有任何效果C# 使用鼠标悬停事件时会显示多个工具提示文本,c#,tooltip,C#,Tooltip,我有一张表格,上面有一个选择客户的组合和一个按钮。 选择客户并将鼠标移到按钮上时,将显示工具提示,其中包含有关该客户的信息 我已经使用tooltip\u Draw自定义了工具提示 所有这些都很好 问题是,当我更改取消选择的客户,然后将鼠标移到按钮上时,会显示几个工具提示文本。我以前选择的每个客户都有一个 我试图以某种方式清空工具提示,但似乎没有任何效果 private void bttCitas_MouseHover(object sender, EventArgs e) { strin
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));
}
}
我终于明白了会发生什么 我需要在MouseOver事件中声明emergent,然后在MouseLeave中处理它:
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();
}
虽然我无法确定原因,但我肯定会将工具提示创建移动到一个比鼠标悬停频率更低的事件;可能是您更新客户的代码。这样,每次将鼠标移到按钮上时,您都在执行完整的数据库操作,只是为了一次又一次地检索相同的信息,并创建更多的工具提示实例。