C# 工具提示阳台显示位置(用于错误通知)
我刚才问了一个与此密切相关的问题: 简言之,我试图找到一种快速、简单的方法,在不使用弹出窗口的情况下通知用户错误 现在我已经使用工具提示baloons实现了这一点。问题是,即使我给它一个大致的位置,气泡的小尖部分也会根据消息的大小而改变位置(见附图)。通常,我会使用SetToolTip()并为其分配一个控件,使其始终指向该控件。但是,控件是状态栏中的标签或图像C# 工具提示阳台显示位置(用于错误通知),c#,.net,error-handling,tooltip,C#,.net,Error Handling,Tooltip,我刚才问了一个与此密切相关的问题: 简言之,我试图找到一种快速、简单的方法,在不使用弹出窗口的情况下通知用户错误 现在我已经使用工具提示baloons实现了这一点。问题是,即使我给它一个大致的位置,气泡的小尖部分也会根据消息的大小而改变位置(见附图)。通常,我会使用SetToolTip()并为其分配一个控件,使其始终指向该控件。但是,控件是状态栏中的标签或图像 private void ShowTooltipBalloon(string title, string msg) { if
private void ShowTooltipBalloon(string title, string msg)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler(delegate { ShowTooltipBalloon(title,msg); }));
}
else
{
ToolTip tt = new ToolTip();
tt.IsBalloon = true;
tt.ToolTipIcon = ToolTipIcon.Warning;
tt.ShowAlways = true;
tt.BackColor = Color.FromArgb(0xFF, 0xFF, 0x90);
tt.ToolTipTitle = title;
int x = this.Width - lblLeftTarget.Width - lblVersion.Width - toolStripStatusLabel8.Width - 10;
int y = this.Height - lblLeftConnectImg.Height - 60;
tt.Show(msg, this, x, y, 5000);
}
}
这超出了要求的范围,但我的老板对细节要求严格,所以除了解决这个问题,我还必须快速解决它。我需要一些相对容易实现的东西,它不会“动摇”我即将发布的当前软件
话虽如此,我当然会听取任何建议,不管它是否可行。至少我可以学点东西
*编辑:似乎我的图像没有显示出来。我不知道这是不是我的电脑。哦,好吧…我知道这是一个相当老的问题,我想我已经错过了你们的交货期限将近4年了……但我相信这解决了你们遇到的问题:
private void ShowTooltipBalloon(string title, string msg)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler(delegate { ShowTooltipBalloon(title, msg); }));
}
else
{
// the designer hooks up to this.components
// so lets do that as well...
ToolTip tt = new ToolTip(this.components);
tt.IsBalloon = true;
tt.ToolTipIcon = ToolTipIcon.Warning;
tt.ShowAlways = true;
tt.BackColor = Color.FromArgb(0xFF, 0xFF, 0x90);
tt.ToolTipTitle = title;
// Hookup this tooltip to the statusStrip control
// but DON'T set a value
// because if you do it replicates the problem in your image
tt.SetToolTip(this.statusStrip1, String.Empty);
// calc x
int x = 0;
foreach (ToolStripItem tbi in this.statusStrip1.Items)
{
// find the toolstrip item
// that the tooltip needs to point to
if (tbi == this.toolStripDropDownButton1)
{
break;
}
x = x + tbi.Size.Width;
}
// guestimate y
int y = -this.statusStrip1.Size.Height - 50;
// show it using the statusStrip control
// as owner
tt.Show(msg, this.statusStrip1, x, y, 5000);
}
}
如果不创建自己的工具提示表单,则需要控制行长(即在50个字符后使用Environment.NewLine)以确保标准宽度。