2013-12-17 4 views
0

У меня есть форма оповещения, которая появляется в правом углу экрана, и я хочу постепенно увеличивать ее высоту, как некоторые антивирусные предупреждения! я попробовать этот код, но не работает, я думаю, я должен использовать degates но я do't знаю, как и на каком evaenПостепенно увеличивайте высоту формы

private void AlertForm__Load(object sender, EventArgs e) 
{ 
    const int h = 377; 
    int Curr = 0; 
    while (Curr < h) 
    { 
     this.Height = Curr; 
     Curr++; 
     Thread.Sleep(10); 
    } 
} 

могли бы вы мне помочь?

+0

Вы должны сделать это за пределами метода AlertForm__Load, потому что вы не увеличивать высоту до 377, а затем метод загрузки завершен и форма будет отображаться с высотой 377 непосредственно. Возможно, используйте таймер http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx –

ответ

0

Вы увеличиваете высоту, но уменьшаете нижнюю часть формы, не перемещая ее вверх.

Вы также должны избегать связывания интерактивности с помощью Thread.Sleep использовать таймер как предложено otis.

Форма, которая не отвечает в течение как минимум 3,77 секунд, пока она «прокручивается», просто будет раздражать.

private void AlertForm__Load(object sender, EventArgs e) 
{ 
    this.myTimer.Enabled = true; 
} 

const int h = 377; 
const int quietTop = 0; 
int Curr = 0; 

private void myTimer_tick() 
{ 
    this.Height = Curr; 
    this.Top = quietTop - Curr; 
    Curr++; 

    if (Curr >= h) 
     this.myTimer.Enabled = false; 
} 
+1

Я хочу показать это изменение пользователям, но он показывает окончательный результат height или top –

+0

@ozzy_mra это потому, что он находится в форме загрузки события и hogging поток пользовательского интерфейса. Для создания обновлений требуется поток пользовательского интерфейса, в том числе изменение позиции формы. –

+0

спасибо, что это работает –

Смежные вопросы