Sam*_*ill 12
从那以后,我对BobbyShaftoe的答案进行了调整,使其更具一般性
笔记:
必须在父控件上设置MouseMove事件(在我的情况下是一个面板)
private void TimeWorks_MouseMove(object sender, MouseEventArgs e)
{
var parent = sender as Control;
if (parent==null)
{
return;
}
var ctrl = parent.GetChildAtPoint(e.Location);
if (ctrl != null && !ctrl.Enabled)
{
if (ctrl.Visible && toolTip1.Tag==null)
{
var tipstring = toolTip1.GetToolTip(ctrl);
toolTip1.Show(tipstring, ctrl, ctrl.Width / 2, ctrl.Height / 2);
toolTip1.Tag = ctrl;
}
}
else
{
ctrl = toolTip1.Tag as Control;
if (ctrl != null)
{
toolTip1.Hide(ctrl);
toolTip1.Tag = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)gal*_*xis 12
将按钮(或适合此方案的任何控件)放在容器(panel,tableLayoutPanel)中,并将工具提示与相应的基础面板单元格相关联.在许多场景中都很有效,灵活.提示:使单元格足够大以容纳bttn,因此鼠标悬停响应(工具提示显示)似乎不会在bttn边界外"流血".
因此,假设您的控件被调用,button1
您可以执行类似的操作.
您必须通过处理MouseMove
表单事件来执行此操作,因为事件不会从您的控件中触发.
bool IsShown = false;
void Form1_MouseMove(object sender, MouseEventArgs e)
{
Control ctrl = this.GetChildAtPoint(e.Location);
if (ctrl != null)
{
if (ctrl == this.button1 && !IsShown)
{
string tipstring = this.toolTip1.GetToolTip(this.button1);
this.toolTip1.Show(tipstring, this.button1, this.button1.Width /2,
this.button1.Height / 2);
IsShown = true;
}
}
else
{
this.toolTip1.Hide(this.button1);
IsShown = false;
}
Run Code Online (Sandbox Code Playgroud)
}
Sam Mackrill,感谢您的回答,很高兴使用Tag来了解您要离开的Control.但是根据BobbyShaftoe的回答,你仍然需要IsShown标志.如果您将鼠标放在错误的位置,如果工具提示出现在它下面,它可以触发另一个MouseMove事件(即使您没有物理移动鼠标).这可能会导致一些不需要的动画,因为工具提示会不断消失并重新出现.
这是我的代码:
private bool toolTipShown = false;
private void TimeWorks_MouseMove(object sender, MouseEventArgs e)
{
var parent = sender as Control;
if (parent == null)
{
return;
}
var ctrl = parent.GetChildAtPoint(e.Location);
if (ctrl != null)
{
if (ctrl.Visible && toolTip1.Tag == null)
{
if (!toolTipShown)
{
var tipstring = toolTip1.GetToolTip(ctrl);
toolTip1.Show(tipstring.Trim(), ctrl, ctrl.Width / 2, ctrl.Height / 2);
toolTip1.Tag = ctrl;
toolTipShown = true;
}
}
}
else
{
ctrl = toolTip1.Tag as Control;
if (ctrl != null)
{
toolTip1.Hide(ctrl);
toolTip1.Tag = null;
toolTipShown = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18302 次 |
最近记录: |