Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 工具提示文本离开屏幕(WinForms)_C#_.net_Winforms_Tooltip - Fatal编程技术网

C# 工具提示文本离开屏幕(WinForms)

C# 工具提示文本离开屏幕(WinForms),c#,.net,winforms,tooltip,C#,.net,Winforms,Tooltip,我画了一个工具提示控件-代码如下 private void toolTip1_Popup(object sender, PopupEventArgs e) { ToolTip tt = (sender as ToolTip); string toolTipText = tt.GetToolTip(e.AssociatedControl); e.ToolTipSize = TextRenderer.Measur

我画了一个工具提示控件-代码如下

private void toolTip1_Popup(object sender, PopupEventArgs e)
        {
            ToolTip tt = (sender as ToolTip);
            string toolTipText = tt.GetToolTip(e.AssociatedControl);
            e.ToolTipSize = TextRenderer.MeasureText(toolTipText, new Font("Arial", 16.0f));
        }
然后设置工具提示文本:

toolTip1.SetToolTip(btnLogin, "Some text....."); 
另外,


它看起来不错,但我注意到,如果文本有一定长度,工具提示将离开屏幕。有没有办法防止这种情况发生?我宁愿不必添加Environment.NewLine();或者\n等等,因为我需要对许多字符串执行此操作。

如果我正确理解您的问题,您将尝试结合发布的两种解决方案,主要是根据屏幕宽度调整
工具提示
窗口的大小,并将其移动到
点(2,2)
,屏幕坐标

如果这是您所需要的,您需要稍微修改源代码,以便在
弹出窗口
事件中设置正确的
e.ToolTipSize
,并且正如上面的先生们所评论的那样,在矩形中绘制字符串,即
e.Bounds
事件中的
e.Bounds
属性

使用系统;
使用系统图;
运用系统反思;
使用System.Runtime.InteropServices;
使用System.Windows.Forms;
公共部分类Form1:Form
{
TextFormatFlags flags=TextFormatFlags.VerticalCenter
|TextFormatFlags。左
|TextFormatFlags.LeftAndRightPadding
|TextFormatFlags.NoClipping
|TextFormatFlags.WordBreak;
公共表格1()
{
初始化组件();
}
私有无效工具提示1_弹出窗口(对象发送者、PopupEventArgs e)
{
var tt=发送者作为工具提示;
var toolTipText=tt.GetToolTip(例如,AssociatedControl);
变量屏幕=屏幕。来自控件(例如关联控件)。工作区域;
使用(var g=e.AssociatedControl.CreateGraphics())
使用(var字体=新字体(“Arial”,16))
{
var sz=TextRenderer.MeasureText(
g、 工具文字、字体、屏幕、大小、标志);
e、 ToolTipSize=新尺寸(屏幕宽度-2,深浅高度+10);
}
}
私有无效工具提示1_绘制(对象发送方,DrawToolTipEventArgs e)
{
var t=发送者作为工具提示;
var h=(IntPtr)t.GetType().GetProperty(“句柄”,
BindingFlags.NonPublic | BindingFlags.Instance).GetValue(t);
移动窗口(h,2,2,e.Bounds.Width-2,e.Bounds.Height,false);
e、 牵引杆接地();
e、 拉边();
使用(var字体=新字体(“Arial”,16))
TextRenderer.DrawText(如图形、工具文字、字体、,
e、 边界,颜色。黑色,标志);
}
[DllImport(“User32.dll”)]
静态外部布尔移动窗口(IntPtr h、int x、int y、,
整数宽度、整数高度、布尔重绘);
}

应该有一个带矩形的抽绳重载,不是吗?我的问题是文本正在脱离屏幕,而不是矩形太小。抽绳重载会将文本限制在矩形的宽度内,所以它应该可以解决您的问题顺便说一句:TextRenderer.MeasureText还可以采用一个大小,以便您可以让它计算给定宽度所需的高度。。。!!哇,屏幕的宽度对于友好的工具提示来说有点大,不是吗?最好测量更合理宽度所需的高度,不是吗?@Taw Hello smart。好的,我会照你说的做。但这是我从问题中了解到的。没有?:)2021年快乐。祝你也一样。是的,由海报决定最佳宽度;我认为他不理解测量员可以限制高度或宽度,并计算其他尺寸。
var screen=screen.FromControl(即关联控制)
。使用TextRenderer测量和绘制文本(我还更新了您链接的答案)。Net的工具提示使用TextRenderer绘制文本。
toolTip1.SetToolTip(btnLogin, "Some text.....");