У меня есть две формы. В основной форме у меня есть кнопка, которая вызывает конструктор другой формы. После того, как форма загружена, она нужна мне для автоматического вызова функции, которая будет перемещать эту форму в некотором направлении. Мне трудно найти событие, которое будет выполнять эту работу, потому что такие события, как Load или Shown, выполняются до того, как форма действительно «показывается» ... Это означает, что цикл, который перемещает форму, завершается раньше, чем формы формы и Форма показывается в конечной позиции. Кто-нибудь знает событие срабатывает после того, как форма видна? или знаете другое решение этой проблемы?
В другой теме я читал о показанном событии, но, к сожалению, оно действует так же, как и событие Load, и я не понимаю, почему :( Есть только одно решение, которое я имею в виду, это создание второго потока с задержкой 500 мс (которого должно быть достаточно для загрузить форму), которая запустит метод move (), но я не знаю, как вызвать функцию, созданную в другом потоке :( ... поток завершится одновременно с методом move ().
Вторая форма с именем Заголовок:
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 () в цикле.