Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/67: Рейтинг темы: голосов - 67, средняя оценка - 4.66
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85

Программно создать эллипс с возможностью его перемещения

05.10.2012, 20:03. Показов 14083. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. подскажите пожалуйста, как можно создать программно еллипс?
я пока написал только это
C#
1
2
3
4
5
6
7
            Ellipse el = new Ellipse();
            canvas1.Children.Add(el);
            el.Height = 3;
            el.Width = 3;
            el.StrokeThickness = 2;
            el.Fill = Brushes.Red;
            el.Visibility = Visibility.Visible;
но его в итоге на форме канвас нету. что нужно сделать что бы его было видно, и что использовать для изменения положения этого еллипса

Добавлено через 59 минут
так, рисование я сделал. как лучше сделать передвижение? вот пока что есть
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
 
namespace game
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            
            Ellipse el = new Ellipse();
            Rectangle re = new Rectangle();
            canvas1.Children.Add(el);
            canvas1.Children.Add(re);
            re.Height = 14;
            re.Width = 100;
            re.Fill = Brushes.Khaki;
            re.Stroke = Brushes.Blue;
            re.StrokeThickness = 2;
            el.Height = 10;
            el.Width = 10;
            el.StrokeThickness = 1;
            el.Fill = Brushes.Red;
            el.Stroke = Brushes.Green;
 
            Canvas.SetLeft(el, 2);
            Canvas.SetTop(el, 3);
            Canvas.SetLeft(re, canvas1.Width/2-re.Width/2);
            Canvas.SetTop(re, canvas1.Height-re.Height);
            double x0 = canvas1.Margin.Left;
            double y0 = canvas1.Margin.Top;
            label1.Content = "Left"+x0.ToString();
            label4.Content = "Top" + y0.ToString();
            for (int i = 0; i < 50; i++)
            {
                
                Canvas.SetLeft(el, i);
                this.canvas1.UpdateLayout();
                el.UpdateLayout();
                
                
            }
            
        }
    }
}
проблема что не обновляет он форму, и шарик сразу же идет в конечное положение
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2012, 20:03
Ответы с готовыми решениями:

Как нарисовать граф с возможностью перемещения его узлов
Задача классическая . Нужно отображать граф .И главное - возможность перемещать его узлы ,а при нажатии на вершину - выделять ее и ребра...

Как программно добавить эллипс на форму?
Как программно добавить эллипс на форму? Как? Добавлено через 11 часов 23 минуты Класс... Супер

Рисование объекта на picturebox с возможностью его перемещения
Вообщем, нужно при нажатии на кнопку что бы активировалась рабочее поле и была возможность при нажатии на мышь что бы на picturebox...

5
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 80
06.10.2012, 02:06
Переместить эллипс можно с помощью анимации или таймера. Вот пример с анимацией:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            this.Width = 525; //Размер окна
            this.Height = 350; //Размер окна
            
            Canvas CN1 = new Canvas(); //Создание Canvas
            CN1.Width = 640; //Размер Canvas 
            CN1.Height = 480; //Размер Canvas
            G1.Children.Add(CN1); //Создание Canvas внутри GRID c именем G1
 
            Ellipse EL1 = new Ellipse(); //Создание эллипса
            EL1.Width = 50; //Размер эллепса
            EL1.Height = 50; //Размер эллепса
            EL1.Fill = Brushes.BlueViolet; //Цвет эллепса
            EL1.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; //Горизонтальное выравнивание
            EL1.VerticalAlignment = System.Windows.VerticalAlignment.Top; //Вертикальное выравнивание
            EL1.Margin = new Thickness(0, 133, 0, 0); //Координаты начального положения
            CN1.Children.Add(EL1); //Создание эллепса внутри Canvas
 
            ThicknessAnimation TA = new ThicknessAnimation(); //Анимация перемещения
            TA.From = EL1.Margin = new Thickness(0, 133, 0, 0); //Координаты начального положения
            TA.To = EL1.Margin = new Thickness(467, 133, 0, 0); //Координаты конечного положения
            TA.Duration = TimeSpan.FromSeconds(3); //Время анимации
            EL1.BeginAnimation(MarginProperty, TA); //Запуск анимации
        }
Статья об анимации: http://professorweb.ru/my/WPF/... 5/15_1.php
0
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 49
06.10.2012, 20:46
для рисования попрбуй добавить
C#
1
el.Stroke = Brushes.Black;
0
1 / 1 / 1
Регистрация: 21.11.2010
Сообщений: 85
07.10.2012, 16:14  [ТС]
а как к примеру сделать через таймер что бы шарик летал по форме, отбиваясь от краев ее? вы указали начальное и конечное положение шара, но конечное положение шара не должно быть. мне нужно просто что бы шар полетел в какую-то сторону при нажатии кнопки.
0
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 80
08.10.2012, 00:05
Цитата Сообщение от shaffle Посмотреть сообщение
а как к примеру сделать через таймер что бы шарик летал по форме, отбиваясь от краев ее? вы указали начальное и конечное положение шара, но конечное положение шара не должно быть. мне нужно просто что бы шар полетел в какую-то сторону при нажатии кнопки.
Отскок эллипса от стенок по таймеру:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
int Skorost; int Minimum_X; int Maximum_X; int Minimum_Y; int Maximum_Y;
        int Nachalnaja_pozicija_X; int Nachalnaja_pozicija_Y; int Shag_peremeshenija;
        System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Skorost = 10; //Задаём скорость перемещения эллипса (меняем время срабатывания таймера).
 
            Minimum_X = 0; //Минимальное значение X (левая стенка)
            Maximum_X = 467; //Максимальное значение X (правая стенка)
 
            Minimum_Y = 0; //Минимальное значение Y (верхняя стенка)
            Maximum_Y = 270; //Максимальное значение Y (нижняя стенка)
 
            Nachalnaja_pozicija_X = 0; //Начальная позиция X (стартовые координаты эллипса по оси X)
            Nachalnaja_pozicija_Y = 130; //Начальная позиция Y (стартовые координаты эллипса по оси Y)
 
            Shag_peremeshenija = 4; //Шаг перемешения (ещё один параметр влияющий на скорость и плавность перемещения эллипса. Определяет на сколько пикселей переместится эллипс в данном случае за 10 миллисекунд.)
 
            Zapusk(); //Запуск перемещения эллипса (запуск таймера)
        }
 
        private void Zapusk()
        {
            X = Nachalnaja_pozicija_X;
            Y = Nachalnaja_pozicija_Y;
            
            timer.Tick += new EventHandler(timerTick); //Инициализация таймера
            timer.Interval = new TimeSpan(0, 0, 0, 0, Skorost); //Время срабатывания таймера
            timer.Start(); //Запуск таймера
        }
 
        double X; double Y;
        bool b1 = true; bool b2 = true;
        private void timerTick(object sender, EventArgs e)
        {
            if (X > Maximum_X) { b1 = false; }
            if (X < Minimum_X) { b1 = true; }
 
            if (Y > Maximum_Y) { b2 = false; }
            if (Y < Minimum_Y) { b2 = true; }
 
            if (b1 == true) { X += Shag_peremeshenija; } else { X -= Shag_peremeshenija; }
            if (b2 == true) { Y += Shag_peremeshenija; } else { Y -= Shag_peremeshenija; }
 
            EL1.Margin = new Thickness(X, Y, EL1.Margin.Right, EL1.Margin.Bottom); 
        }
Полёт эллипса без конечного положения по таймеру:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            timer.Tick += new EventHandler(timerTick); //Инициализация таймера
            timer.Interval = new TimeSpan(0, 0, 0, 0, 10); //Время срабатывания таймера 
            timer.Start(); //Запуск таймера
        }
 
        double X; double Y;
        private void timerTick(object sender, EventArgs e)
        {
            EL1.Margin = new Thickness(X, Y, EL1.Margin.Right, EL1.Margin.Bottom);
 
            X += 1; //Увеличиваем каждые 10 миллисекунд (в данном случае) координату X и эллипс сдвигается в право;
        }
Исходник внизу:
Вложения
Тип файла: rar Отскок эллипса от стенок.rar (199.1 Кб, 155 просмотров)
1
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 1
02.09.2015, 14:24
LirG, Спасибо ты меня спас.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2015, 14:24
Помогаю со студенческими работами здесь

Создать класс, в котором механизм перемещения кнопки, для создания его экземпляров
Доброго времени суток, форумчане! Помогите, пожалуйста, новичку ... Имеется два метода с механизмом перемещения кнопки: ...

Соединить линией 2 объекта с возможностью перемещения
Доброе время суток. у меня есть 2 Edit могу ли я их соединить линией ? да так, что бы перемещая любой из них соединение линией не...

Соединить линией объекты с возможностью перемещения
Доброе время суток. проект в нем 36 Edit-ов которые распределены в 9 Group Box-ax. пожалуйста соедините Edit-ы между Group Box-ов. с...

Стек с возможностью перемещения произвольного элемента в вершину.
Стек с возможностью перемещения произвольного элемента в вершину.

3D визуализация графа с возможностью перемещения внутри него
Имеется граф в виде динамической структуры. Какие есть алгоритмы, чтобы отобразить его в 3D, чтобы он был адекватным человеческому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru