Winforms 在表单之间平滑过渡
我有两个表单,希望在每个表单中单击按钮时在它们之间来回切换。这可以通过打开新表单并关闭当前表单来完成。然而,根据经验,如果新的一个需要时间来充分显示,可能会有一个空白,没有显示形式。我正在尝试使用表单。显示的事件可避免此问题:Winforms 在表单之间平滑过渡,winforms,Winforms,我有两个表单,希望在每个表单中单击按钮时在它们之间来回切换。这可以通过打开新表单并关闭当前表单来完成。然而,根据经验,如果新的一个需要时间来充分显示,可能会有一个空白,没有显示形式。我正在尝试使用表单。显示的事件可避免此问题: private void button1_Click(object sender, EventArgs e) { var form2 = new Form2(); var shown = new AutoResetEvent(false); for
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2();
var shown = new AutoResetEvent(false);
form2.Shown += (ta, tb) => { shown.Set(); };
form2.Show();
shown.WaitOne();
Close();
}
但是,它会在WaitOne语句上死锁。在click方法完成之前,似乎不会引发显示的事件。我还能怎么做呢?这一切都发生在同一个线程上-显示的
事件将被发布,并将在您的按钮1\u单击(…)
方法完成后进行处理-这从未发生过。您可以尝试form2.show+=(ta,tb)=>{this.Close();}代码>取而代之(并删除WaitOne
和另一个Close
),但我还没有尝试过,所以不能保证我之前已经尝试过了。它简要地展示了新形式,然后是旧形式,最后是新形式。如果我可以隐藏新表单,直到抛出显示的表单,这就足够了。在新表单2()之后代码>和在form2.Show()之前代码>我已将不透明度设置为0,然后在显示的处理程序中将其设置回原来的值。这基本上是可行的,但有时在Show()期间,一些新控件会短暂出现,然后消失。