Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2014, 12:52   #1
Anton13
 
Регистрация: 14.09.2012
Сообщений: 9
По умолчанию Движение изображений в форме

Пишу приложение для куровой. Работаю с Form. C# недавно изучаю. Надо чтобы картинка двигалась по экрану. Пока сделал так что картинка загружается на экран на фоне другой картинки. Но мне надо чтобы она двигалась. Я придумал как делать распологаю картину на фоне потом заново распологаю фон на форме он закрывает эту картинку. А потом распологаю картинку в другие координаты. Только у меня это все происходит мгновенно и движения не видно. Хотел сделать через таймер но он ошибки выдает. Скажите как это решить.

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void timer1_Tick(object sender, EventArgs e)
{

}

private void Form1_Paint(object sender, PaintEventArgs e)
{
this.Text = "Рисунок";
var fon = Image.FromFile(@"C:\Users\Антон\Desktop\Учебный проект\fon.jpg");
var koshka = Image.FromFile(@"C:\Users\Антон\Desktop\Учебный проект\koshka.bmp");
e.Graphics.DrawImage(fon, 0, 0);
e.Graphics.DrawImage(koshka, 5, 5);
e.Graphics.DrawImage(fon, 0, 0);
e.Graphics.DrawImage(koshka, 100, 100);
e.Graphics.DrawImage(fon, 0, 0);
e.Graphics.DrawImage(koshka, 150, 5); 
}
}
}


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 28.04.2014 в 13:13.
Anton13 вне форума Ответить с цитированием
Старый 28.04.2014, 13:57   #2
nedel
Пользователь
 
Регистрация: 09.04.2014
Сообщений: 18
По умолчанию

Код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Text = "Рисунок";
fon = Image.FromFile(@"C:\Users\Антон\Desktop\Учебный проект\fon.jpg");
koshka = Image.FromFile(@"C:\Users\Антон\Desktop\Учебный проект\koshka.bmp");

}
Image fon;
Image koshka;

private void timer1_Tick(object sender, EventArgs e)
{
position=position.Offset(5,5); //тут устанавливаете новое положение рисунка
this.Invalidate();
}
Point position=new Point(0,0);
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(fon, 0, 0);
e.Graphics.DrawImage(koshka, position);
}
}
}
nedel вне форума Ответить с цитированием
Старый 28.04.2014, 14:57   #3
Anton13
 
Регистрация: 14.09.2012
Сообщений: 9
По умолчанию

Спасибо конечно за код. Только я в нем ни чего не понял.
Anton13 вне форума Ответить с цитированием
Старый 28.04.2014, 16:03   #4
nedel
Пользователь
 
Регистрация: 09.04.2014
Сообщений: 18
По умолчанию

Код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

//чтобы 100 раз не читать картинки с файлов, читаем 1 раз в кострукторе
this.Text = "Рисунок";
fon = Image.FromFile(@"C:\Users\Антон\Desktop\Учебный проект\fon.jpg");
koshka = Image.FromFile(@"C:\Users\Антон\Desktop\Учебный проект\koshka.bmp");

}
Image fon;
Image koshka;
Point position=new Point(0,0); //позиция рисунка, которую будем изменять по таймеру

private void timer1_Tick(object sender, EventArgs e) // когда сбатывает таймер изменяем положение рисунка и перерисовываем форму
{
position=position.Offset(5,5); //тут устанавливаете новое положение рисунка
// я тут просто передвинул на 5 вправо и вниз, можно изменять по другому, в зависимомти от задачи
this.Invalidate(); // заставляем форму перерисовать себя
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(fon, 0, 0); //рисуем фон
e.Graphics.DrawImage(koshka, position); //рисуем рисунок там, где он должен быть
}
}
}
nedel вне форума Ответить с цитированием
Старый 28.04.2014, 16:36   #5
Anton13
 
Регистрация: 14.09.2012
Сообщений: 9
По умолчанию

А так я понял. Спасибо. Получается что весь код который находится под методом timer будет выполняться пока таймер не закончится, а то что сверху выполняется один раз. Я так понял что для перемещения используется переменная position. А можно же будет создать переменную например dx и задать цикл. Чтобы объект постоянно перемещался. Но принцип я понял спасибо.
Anton13 вне форума Ответить с цитированием
Старый 29.04.2014, 17:54   #6
Anton13
 
Регистрация: 14.09.2012
Сообщений: 9
По умолчанию

Кстати показывает ошибку в это строчке position=position.Offset(5,5); //тут устанавливаете новое положение рисунка

Ошибка 1 Неявное преобразование типа "void" в "System.Drawing.Point" невозможно
Anton13 вне форума Ответить с цитированием
Старый 29.04.2014, 18:50   #7
nedel
Пользователь
 
Регистрация: 09.04.2014
Сообщений: 18
По умолчанию

Код:
position=position.Offset(5,5);
замените на
Код:
position.Offset(5,5);
по памяти писал
nedel вне форума Ответить с цитированием
Старый 30.04.2014, 08:41   #8
Anton13
 
Регистрация: 14.09.2012
Сообщений: 9
По умолчанию

Она почему-то не подвинулась. Осталась в положении 0;0. Может поменять местами последовательность расположения методов в коде ?? Или в C# это не имеет значения ???
Anton13 вне форума Ответить с цитированием
Старый 30.04.2014, 11:56   #9
nedel
Пользователь
 
Регистрация: 09.04.2014
Сообщений: 18
По умолчанию

А таймер запущен? На пример:
Код:
protected override OnLoad(EventArgs e)
{
timer1.Start();
}
nedel вне форума Ответить с цитированием
Старый 30.04.2014, 17:36   #10
Anton13
 
Регистрация: 14.09.2012
Сообщений: 9
По умолчанию

Нашел выход в свойствах Таймера Enabled выставил истину и заработало. Только вот мерцание на экране. Он моргает видимо обновляется.
Anton13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод изображений на форме Vladya Microsoft Office Access 0 17.02.2014 10:47
Движение растровых изображений в делфи Katerina_K Помощь студентам 2 25.10.2013 14:24
движение фигуры по форме alex(21) C# (си шарп) 6 29.11.2012 14:22
Движение image по форме! RomanRens Общие вопросы Delphi 3 24.02.2012 10:10
движение кнопки по форме Olya1985 Общие вопросы Delphi 10 22.08.2011 14:13