当您收到新电子邮件时,我正在尝试创建一个类似于Outlook使用的通知窗口。我在通知窗口上有一个无模式的窗体,上面有两个Label控件以显示通知信息。为了获得淡入效果,我要调用Win32 AnimateWindow函数。除了一件事,一切似乎都正常。
当我p /调用AnimateWindow时,动画效果结束后,Label控件中的文本才出现在窗体上。我希望它随着表格的其余部分逐渐消失。我怀疑它与窗体更新其子控件时有关。我认为该窗体直到AnimateWindow调用之后才告诉其子级进行更新。在设置标签的文本字段后,我尝试粘贴Form.Update()调用,但这无济于事。
我现在正在执行的基本步骤:
// Main form of the application.
public class MainForm : Form
{
// The notification toast.
protected ToastForm toast;
// Public method called to show and update the toast.
public void UpdateToast( string text1, string text2 )
{
// Create a new toast form if one does not exist yet.
if ( this.toast == null )
{
this.toast = new ToastForm();
}
// Update the toast form's Label controls.
// Note that this isn't exactly how it's done in my app. There are fields safely
// wrapping the Label controls. I just did it this way here to be concise.
this.toast.firstLabel.Text = text1;
this.toast.secondLabel.Text = text2;
// This doesn't help.
this.toast.Update();
// P/invoke the Win32 AnimateWindow function on the toast form.
User32.AnimateWindow( this.toast.Handle, 750, AnimateWindowFlags.AW_ACTIVATE | AnimateWindowFlags.AW_BLEND );
// Call Show method on the toast form. This is needed to get the controls to
// update at all.
this.toast.Show( this );
}
}
有没有人有任何建议使它工作?
编辑:
我找出了一个办法。分配标签文本后,我将烤面包的大小设置为0宽度和0高度。接下来,我先将其称为“显示”,然后将其隐藏在吐司上。然后,我将烤面包的大小恢复为原来的大小。最后,我在吐司面包上调用AnimateWindow。是的,它可以工作,但这是一个hack ...有更好的主意吗?
最佳答案
codeproject站点上有一个很好的例子。
关于c# - .NET AnimateWindow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1493293/