2016-04-02 3 views
-1

Я хочу, чтобы, если я нажимаю на изображение, он дает визуальный эффект, такой как вихревой эффект или эффект свечения или что-то еще на определенной части вокруг точки, где я щелкнул мышью. например, если кто-то использовал пароль изображения UC-браузера Windows-телефона точно так же, как я хочу.Визуальный эффект при щелчке мышью в C#

Я ничего не пробовал, потому что у меня нет знаний об анимации и графике, поэтому я ничего не пробовал.

public void start() 
{ 
    messagebox.show("i haven't tried anything yet no knowledge of animation"); 
} 

Этот код является ничем иным, как я написал его, потому что я не смог опубликовать вопрос.

+1

Что вы нацеливаете: Winforms? WPF? ASP? ... ?? __Always__ соответствующим образом помечайте свой вопрос! – TaW

+1

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

+0

В winforms вы, вероятно, захотите сделать это: создать и запустить таймер на MouseClick. Также сохраните e.Location, куда попадает MouseClick. В Timer.Tick Invalidate PictureBox и увеличивайте счетчик уровня до тех пор, пока он не достигнет предела. В событии Paint PB вы можете сделать некоторую графику, например DrawEllipse, вокруг точки с радиусом счетчика. Когда предел попадает в тик, остановите таймер и сбросьте счетчик на значение, которое понимает событие Paint: это означает, что больше нет рисунка. Готово. Около 10-15 строк .. – TaW

ответ

0

В Winforms вы могли бы написать такой код:

int AnimationCounter = 0; 
Point AnimationCenter = Point.Empty; 
Timer AnimationTimer = new Timer(); 

private void pictureBox1 _MouseClick(object sender, MouseEventArgs e) 
{ 
    AnimationCenter = e.Location; 
    AnimationTimer.Interval = 20; 
    AnimationTimer.Start(); 
} 

void AnimationTimer_Tick(object sender, EventArgs e) 
{ 
    if (AnimationCounter > 15) 
    { 
     AnimationTimer.Stop(); 
     AnimationCounter = 0; 
     pictureBox1.Invalidate(); 
    } 
    else 
    { 
     AnimationCounter += 1; 
     pictureBox1.Invalidate(); 
    } 
} 

private void pictureBox1 _Paint(object sender, PaintEventArgs e) 
{ 
    if (AnimationCounter > 0) 
    { 
     int ac = AnimationCounter/2; 
     e.Graphics.DrawEllipse(Pens.Orange, AnimationCenter.X - ac, 
              AnimationCenter.Y - ac, ac * 2, ac * 2); 
    } 
} 

Не забудьте hook up the Paint and MouseClick event and also the AnimationTimer_Tick event.!

Результат приведет к увеличению круга в месте, на которое вы нажмете, который исчезнет после ок. 10 * 20 мс ..

Обновление: Первая версия страдает от многократного подключения события Tick. Это лучше проверено ;-)

+0

thanx TaW. я реализовал его в результате того, что получил: во-первых, когда я щелкнул в любом месте, эллипсы, которые были нарисованы, были разных размеров. Во-вторых, когда я щелкнул где-то, эллипсы скрываются, когда я нажимаю второй раз, когда он должен скрываться в первый раз. –

+0

Упс. Я не успел щелкнуть, чтобы увидеть это. Ошибка заключалась в подключении события к каждому клику, в результате чего он запускался все чаще и чаще, оставляя артефакты позади. Исправлена. – TaW

+0

Да, его работа, но увы только в 3 раза .. тогда та же проблема и еще одна вещь, что эллипсы исчезают очень быстро –

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