Вопрос

Я хотел бы знать, можно ли создать красивые эффекты формы в компактной структуре.

Мой план состоит в том, что когда пользователь выбирает изображение в основной форме, оно открывается в новой форме, в настоящее время это работает.Теперь я хочу сделать форму, содержащую полноразмерное изображение, которая будет загружаться с края (левого или правого) экрана на высоте около 4 пикселей, а затем перемещаться в поле зрения.Как только форма полностью появится на экране, увеличьте высоту, пока она не достигнет максимальной для экрана.

При закрытии я хотел бы снова уменьшить высоту до 4 пикселей и снова сдвинуть край, прежде чем удалять форму.

Я пробовал приведенный ниже код при создании экземпляра формы, и свойство dp.Top всегда было равно 0, независимо от dp.Width == 240.

DisplayPicture dp = new DisplayPicture(ImageUrl);
dp.WindowState = FormWindowState.Normal;
dp.Left = dp.Width * -1;
dp.Top = (dp.Height / 2) - 2;
dp.Height = 4;
dp.ShowDialog();       

В форме DisplayPicture у меня также есть следующее, чтобы попытаться переместить форму, но, поскольку она не устанавливает свойство Top, этот код пока не имеет значения.

void t_Tick(object sender, EventArgs e)
{
    if (this.Left < 0)
        this.Left += 5;

    if (this.Left > -1)
    {
        this.Left = 0;
        if (this.Height < pictureBox1.ClientRectangle.Height)
        {
            this.Height += 4;
            this.Top -= 2;
        }

        if ((this.Left == 0) && (this.Top == 0))
            t.Enabled = false;

    }
}

Любая помощь будет принята с благодарностью!

ТИА

Один выстрел

Это было полезно?

Решение

Для этого начните с элемента управления PictureBox, в который загружено ваше изображение.Установите высоту на 4, ширину на ширину вашей формы и (очень важно) установите РазмерРежим PictureBox для Растянуть изображение.

Затем расположите PictureBox за пределами экрана, установив для параметра Top значение 0, а для параметра Left значение -Width.Поместите в форму элемент управления Timer с интервалом 100 (или что-то в этом роде), и его событие постепенно переместит PictureBox вправо, пока его свойство Left не станет равным 0.Как только вы достигнете этой точки, событие таймера постепенно увеличит высоту, пока не достигнет высоты формы.

Вам, вероятно, придется иметь дело с мерцанием, но это должно помочь вам начать.

Обновлять:Я только что прочитал ваш вопрос немного ближе и понял, что вы действительно хотите переместить саму форму из закадрового режима в полноэкранный.Это невозможно, если вы хотите, чтобы вся форма (включая строку заголовка вверху) анимировалась таким образом, но вы можете сделать это, установив FormBorderStyle формы (или я думаю, что это просто называется BorderStyle в Compact Framework) на Нет.Если для BorderStyle установлено значение None, изменение свойств Height, Width, Top и Left фактически окажет видимый эффект на форму (хотя форма будет без полей). В противном случае эти свойства полностью игнорируются в Windows Mobile., вероятно, поэтому ваш код ничего не делает.

Обновление 2:вот мой ответ на аналогичный вопрос WM, который может помочь вам сделать ваше анимированное окно похожим на настоящее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top