当鼠标悬停在禁用的控件上时,我正在尝试显示工具提示.由于禁用的控件不处理任何事件,我必须在父表单中执行此操作.我选择通过处理MouseMove
父表单中的事件来完成此操作.这是完成工作的代码:
void Form1_MouseMove(object sender, MouseEventArgs e)
{
m_toolTips.SetToolTip(this, "testing tooltip on " + DateTime.Now.ToString());
string tipText = this.m_toolTips.GetToolTip(this);
if ((tipText != null) && (tipText.Length > 0))
{
Point clientLoc = this.PointToClient(Cursor.Position);
Control child = this.GetChildAtPoint(clientLoc);
if (child != null && child.Enabled == false)
{
m_toolTips.ToolTipTitle = "MouseHover On Disabled Control";
m_toolTips.Show(tipText, this, 10000);
}
else
{
m_toolTips.ToolTipTitle = "MouseHover Triggerd";
m_toolTips.Show(tipText, this, 3000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码确实处理禁用控件的工具提示显示.问题是当鼠标悬停在禁用的控件上时,工具提示会一直关闭并重新显示.从我在工具提示中添加的显示时间开始,当鼠标位于父窗体上方时,MouseMove
事件大约每3秒调用一次,因此工具提示每3秒更新一次.但是当鼠标在禁用的控件上时,工具提示每1秒刷新一次.此外,当工具提示在表单上方刷新时,只有文本会通过简短的闪存进行更新.但是当工具提示在禁用的控件上方刷新时,工具提示窗口会关闭,就像鼠标移动到启用的控件中一样,工具提示应该关闭.但随后工具提示立即重新出现.
有人能告诉我为什么会这样吗?谢谢.
我前几天调试了一个存储过程,发现了一些像这样的逻辑:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
Run Code Online (Sandbox Code Playgroud)
这没有任何回报.我认为"<>"看起来有点奇怪,所以我将其改为"NOT IN"然后一切正常.我想知道为什么会这样?这是一个非常古老的过程,我不确定该问题存在多久,但我们最近从SQL Server 2005切换到SQL Server 2008时发现了这个问题."<>"和"NOT IN"之间的真正区别是什么,并且Server2005和2008之间的行为有所改变?