首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -加载窗体后移动窗体

C# -加载窗体后移动窗体
EN

Stack Overflow用户
提问于 2011-07-19 02:14:40
回答 1查看 903关注 0票数 1

我有两个表格。在主窗体中,我有一个按钮,它调用另一个窗体的构造函数。在表单加载后,我需要它自动调用一个函数,该函数将在某个方向上移动此表单。我很难找到一个事件来做这项工作,因为像加载或显示的事件是在表单实际“显示”之前执行的……这意味着移动窗体的循环在窗体出现之前就完成了,并且窗体显示在最终位置。有人知道窗体可见后触发的事件吗?或者知道这个问题的另一个解决方案?

关于另一个主题,我读到过关于显示的事件,但不幸的是它的行为与Load事件相同,我不明白为什么:(我只有一个解决方案,它是创建第二个线程,延迟500ms (这应该足以加载表单),它将启动move()方法,但我不知道如何调用在不同线程上创建的函数:( ...线程将与move()方法同时结束。

命名为Title的第二个表单:

代码语言:javascript
复制
public partial class Title : Form
{

    public Title()
    {
        InitializeComponent();
        this.Left = (Screen.AllScreens[0].Bounds.Width + Screen.AllScreens[1].Bounds.Width / 2 - this.Width / 2);
        this.Top = (Screen.AllScreens[1].Bounds.Height-80);        


    }

    // metod moves form
    public void move() 
    {

        while (this.Top > 400)
        {
            this.Top--;
            Thread.Sleep(1);
        }
    }

    // another button closes this form with reverse move animation - this works fine
    public void Destruct()  
    {
        while (this.Top < (Screen.AllScreens[1].Bounds.Height - 80))
        {
            this.Top++;
            Thread.Sleep(1);

        }
        this.Close();
    }

    private void Title_Shown(object sender, EventArgs e)
    {
        move();
    }


}

解决方案我在循环中使用Windows.Timer而不是Thread.Sleep()。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-19 02:27:01

看起来你要创造一种慢飞的效果。我建议您使用计时器,而不是使用Thread.Sleep()循环。您可以在事件中创建和启用计时器。在计时器的每一次滴答之后,你都会将窗口移动一点。在它到达结束位置后,您只需禁用计时器(Enabled=false)即可。您可以使用工具箱中的计时器控件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6737382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档