在我的应用程序中,我有一个自定义工具提示,它源自标准System.Windows.Forms.Form
类。它具有WS_EX_COMPOSITED
样式集,可防止闪烁。它可以包含多行文本,也可以包含一些控件。每当其内容发生变化时,都会重新计算其大小,使其与其中的控件的边界相匹配。但是,我注意到了一些奇怪的行为 - 例如,有时它无法完全显示出来,有时会被切断。
我创建了一个简单的应用程序来演示这些问题。看截图:
当您将鼠标移动到其中一个显示的圆圈上时,工具提示应显示N
行文字,其中N
是圆圈内绘制的数字。在屏幕截图中,您可以看到工具提示已被剪切,因此只有"项目#1"是可见的。鼠标从" 1"移动到左边。圆形,工具提示内容已更新为包含9行文本,但其大小保持不变。不幸的是,这些问题似乎是随机发生的,因此您必须“玩”#34;应用程序一段时间后,在圆圈之间移动鼠标。
到目前为止,我已经做了这些观察:
WS_EX_COMPOSITED
样式时,问题就会消失这表明,当从隐藏状态变为可见状态时,具有WS_EX_COMPOSITED
样式的窗口可能无法更新其大小。
有谁知道这里发生了什么?完整的示例项目适用于download。
答案 0 :(得分:0)
我设法将示例简化到可以得出结论的地方:Form
样式的WS_EX_COMPOSITED
通常未正确绘制如果隐藏它然后尝试再次显示而不改变其大小。
所以最简单的 hack 就是
protected override void OnVisibleChanged( EventArgs e )
{
if( this.Visible )
{
this.Height++;
}
}