Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 146

Обработать клик по нарисованному эллипсу

02.07.2015, 19:05. Показов 1058. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нарисовал эллипс, и мне нужно, чтобы при клике на него выводилась надпись. Сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
            B.Color = Color.FromArgb(1, 116, 10);
            graphics.FillEllipse(B, 20, 30, 50, 30);
...
        private void Form1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            if (Math.Pow((e.X -40) / 50, 2) + Math.Pow((e.Y-60)/ 30, 2) == 1)
            {
                MessageBox.Show("Это звук");
            }
 
        }
Но почему-то обработчик события реагирует не в том месте, где нарисован эллипс, подскажите в чём ошибка!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2015, 19:05
Ответы с готовыми решениями:

Обработать клик по GroupBox
Как мне обработать клик по groupbox?

Обработать клик по компоненту
Здравствуйте. Стоит такая задача, необходимо сгенерировать круг на экране, и в случае нажатия на него выполнить определенные действия, то...

Помогите обработать клик в DataList?
В гриде я делал так: Private Sub dgHazmBitzua_ItemDataBound(ByVal sender As System.Object, ByVal e As...

4
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
03.07.2015, 01:02
griboyedov,
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
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
 
namespace WindowsFormsApplication13
{
    public partial class Form1 : Form
    {
        List<Ellipse> ellipses = new List<Ellipse>();
 
        public Form1()
        {
            InitializeComponent();
 
            ellipses.Add(new Ellipse(new Rectangle(10, 10, 150, 100)) { Name = "ellipse 1" });
            ellipses.Add(new Ellipse(new Rectangle(200, 200, 150, 100)) { Name = "ellipse 2" });
        }
 
        protected override void OnMouseClick(MouseEventArgs e)
        {
            base.OnMouseClick(e);
 
            foreach (var ellipse in ellipses)
                if (ellipse.HitTest(e.Location))
                    MessageBox.Show(ellipse.Name);
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
 
            foreach (var ellipse in ellipses)
                ellipse.Draw(e.Graphics);
        }
    }
 
    class Ellipse
    {
        public GraphicsPath Path { get; private set; }
        public string Name{get;set;}
 
        public Ellipse(Rectangle bounds)
        {
            Path = new GraphicsPath();
            Path.AddEllipse(bounds);
        }
 
        public void Draw(Graphics gr)
        {
            gr.FillPath(Brushes.Blue, Path);
        }
 
        public bool HitTest(Point p)
        {
            return Path.IsVisible(p);
        }
    }
}
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
04.07.2015, 16:54
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            int a = 25, b = 15;
            int xC = 20 + a, yC = 30 + b;
            double dX = e.X - xC;
            double dY = yC - e.Y;
            double alpha = Math.Atan2(dY, dX);
            double beta = Math.Atan(Math.Tan(alpha) * a / b);
            double x = a * Math.Cos(beta);
            double y = b * Math.Sin(beta);
            double l = Math.Sqrt(dX * dX + dY * dY);
            if (Math.Sqrt(x * x + y * y) >= l)
            {
                Console.Beep();
                MessageBox.Show("Это звук");
            }
        }
0
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 146
06.07.2015, 15:08  [ТС]
MansMI, у меня много таких эллипсов а можно как-нибудь твой код в общем виде представить?
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
06.07.2015, 15:37
параметрические формулы эллипса для всех мировых эллипсов справедливы, лишь бы их центр знать и полуоси
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2015, 15:37
Помогаю со студенческими работами здесь

обработать клик на ячейке DataGridView
Здравствуйте. Есть две формы: в первой по щелчку на кнопке открывается вторая форма. На второй есть DataGridView. Как обработать...

Как обработать клик по ссылке?
Здравствуйте. Возникла проблема обработки клика на ссылку. Ссылка - это путь к файлу. Собственно, зачем это нужно? Хотелось бы, когда...

Как обработать клик на строку?
Можно ли? Или только на кнопку? Вот я нарисовала строку g.drawString(&quot;privet&quot;, 10, 20); и хотела бы, чтобы после нажатия на неё там...

Обработать клик по картинке на PictureBox
Обработать клик по картинке на PictureBox. Возможно ли это? Если да, то как?

Обработать клик по ссылке в RichTextBox
Всем знатокам доброго времени суток! В ричтекстбоксе есть ссылка на страницу Интернета, например: &quot;...ведущий научный...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru