Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/198: Рейтинг темы: голосов - 198, средняя оценка - 4.81
241 / 243 / 27
Регистрация: 30.01.2014
Сообщений: 1,145
Записей в блоге: 2

Рисование кругов

23.07.2016, 17:33. Показов 37072. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
нарисовать несколько кругов (закрашенных окружностей) с центрами в заданных точках, красного цвета, полупрозрачных, диаметр взять из combobox.
Что сделал:
объявил класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Krug
        {
            int Daln;
            int x;
            int y;
            public void DrawKrug(object sender, PaintEventArgs e)
            {
                {
                    Graphics g = e.Graphics;
                    Pen pen = new Pen(Color.Red);
                    g.DrawEllipse(pen, x, y, D, D);
                }
            }
                   }
Вставил бокс с передаваемым значением D:
C#
1
2
3
4
5
private void Diam1SelectedIndexChanged(object sender, EventArgs e)
        {
            int D = Convert.ToInt32(Diam1.Text);
         
    }
соответственно, комбобоксов будет по числу кругов.
По моему пониманию ("позавчера впервые открыл книгу по C#") для того, чтобы нарисовать круг, мне понадобится после кода обработчика "Diam1SelectedIndexChanged" каким-то образом вставить код, создающий объект класса Krug с полями, присущими этому объекту - часть унаследована от класса, а часть (диаметр) - получена из комбобокса.
Куда и что вписать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.07.2016, 17:33
Ответы с готовыми решениями:

Рисование нескольких кругов в панели
нужно написать программу : при клике по панели рисуется новый круг. Как это реализовать?

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

Рисование Рисование точек по координатам
Доброе время суток. Помогите мне наглядным примером. У меня есть массив координат a х у 1 2 3 4 1 3 кпримеру, мне нужно...

7
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
23.07.2016, 17:57
Sumen,
Рисовать в классе круга не нужно.
Я дам пример. Думаю, разберетесь.
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
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
 
    List<Krug> list = new List<Krug>(); //список кругов
 
    private void Form1_Paint(object sender, PaintEventArgs e) //рисовать лучше здесь
    {
        Pen pen = new Pen(Color.Red);
        foreach (Krug krug in list)
        {
            e.Graphics.DrawEllipse(pen, krug.X, krug.Y, krug.Diam, krug.Diam);
        }
    }
 
    private void btnAdd_Click(object sender, EventArgs e) //кнопка Добавить
    {
        int x = int.Parse(tbX.Text); //текстбокс Х
        int y = int.Parse(tbY.Text); //текстбокс Y
        int d = int.Parse(cbDiam.SelectedItem.ToString()); //комбобокс с диаметром
        list.Add(new Krug(d, x, y)); //добавляем круг в список
        this.Invalidate(); //перерисовываем форму
    }
 
}
 
class Krug
{
    public int Diam { set; get; }
    public int X { set; get; }
    public int Y { set; get; }
    public Krug(int d, int x, int y)
    {
        this.Diam = d;
        this.X = x;
        this.Y = y;
    }
}
0
241 / 243 / 27
Регистрация: 30.01.2014
Сообщений: 1,145
Записей в блоге: 2
25.07.2016, 14:19  [ТС]
Даценд, Спасибо, буду разбираться.
0
241 / 243 / 27
Регистрация: 30.01.2014
Сообщений: 1,145
Записей в блоге: 2
28.07.2016, 17:35  [ТС]
Что-то не получилось.
Решил немного видоизменить: координаты x,y - статические, а отрисовку запустить от обработчика события комбобокса:
C#
1
2
3
4
5
6
7
8
9
 
private void DiamSelectedIndexChanged(object sender, EventArgs e) //выбор диаметра в комбобоксе
    {
        int x = 100;
        int y = 100;
        int d = int.Parse(Diam.SelectedItem.ToString()); //комбобокс с диаметром
        list.Add(new Krug(d, x, y)); //добавляем круг в список
        this.Invalidate(); //перерисовываем форму
    }
все остальное - без изменений. Форма прорисовывается, комбобокс тупо переключается. Круг не рисуется.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.07.2016, 18:33
Цитата Сообщение от Sumen Посмотреть сообщение
Круг не рисуется.
Вижу 2 возможных ошибки:
1) не подключен к событию обработчик DiamSelectedIndexChanged
2) не подключен к событию обработчик Form1_Paint
Потому что вот полностью код:
Кликните здесь для просмотра всего текста
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
public partial class Form1 : Form
{
 
    public Form1()
    {
        InitializeComponent();
    }
 
    List<Krug> list = new List<Krug>(); //список кругов
 
    private void Form1_Load(object sender, EventArgs e)
    {
        Diam.SelectedIndexChanged += DiamSelectedIndexChanged;
        this.Paint += new PaintEventHandler(Form1_Paint);
    }
 
    private void Form1_Paint(object sender, PaintEventArgs e) //рисовать лучше здесь
    {
        Pen pen = new Pen(Color.Red);
        foreach (Krug krug in list)
        {
            e.Graphics.DrawEllipse(pen, krug.X, krug.Y, krug.Diam, krug.Diam);
        }
    }
 
    private void DiamSelectedIndexChanged(object sender, EventArgs e) //выбор диаметра в комбобоксе
    {
        int x = 100;
        int y = 100;
        int d = int.Parse(Diam.SelectedItem.ToString()); //комбобокс с диаметром
        list.Add(new Krug(d, x, y)); //добавляем круг в список
        this.Invalidate(); //перерисовываем форму
    }
 
 
}
class Krug
{
    public int Diam { set; get; }
    public int X { set; get; }
    public int Y { set; get; }
    public Krug(int d, int x, int y)
    {
        this.Diam = d;
        this.X = x;
        this.Y = y;
    }
}

Вот результат (круги диаметрами 20, 50, 70, 100, 150):
Миниатюры
Рисование кругов  
0
241 / 243 / 27
Регистрация: 30.01.2014
Сообщений: 1,145
Записей в блоге: 2
28.07.2016, 18:34  [ТС]
Создал вообще новый проект - только поля, комбобокс и кнопка, скопипастил туда код - не рисует((
Код - не тот, который "полностью" из спойлера.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.07.2016, 18:50
Цитата Сообщение от Sumen Посмотреть сообщение
скопипастил туда код - не рисует((
Мало скопипастить. Нужно обработчики подписать.
Код под спойлером с динамическим подключением обработчиков. Хотя нет, там нужно Form_Load подписывать.
Код из текущего сообщения можно просто копипастить. На форме нужен только комбобокс с именем Diam:
Кликните здесь для просмотра всего текста
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
public partial class Form1 : Form
{
 
    public Form1()
    {
        InitializeComponent();
        Diam.SelectedIndexChanged += DiamSelectedIndexChanged;
        this.Paint += new PaintEventHandler(Form1_Paint);
    }
 
    List<Krug> list = new List<Krug>(); //список кругов
 
    private void Form1_Paint(object sender, PaintEventArgs e) //рисовать лучше здесь
    {
        Pen pen = new Pen(Color.Red);
        foreach (Krug krug in list)
        {
            e.Graphics.DrawEllipse(pen, krug.X, krug.Y, krug.Diam, krug.Diam);
        }
    }
 
    private void DiamSelectedIndexChanged(object sender, EventArgs e) //выбор диаметра в комбобоксе
    {
        int x = 100;
        int y = 100;
        int d = int.Parse(Diam.SelectedItem.ToString()); //комбобокс с диаметром
        list.Add(new Krug(d, x, y)); //добавляем круг в список
        this.Invalidate(); //перерисовываем форму
    }
 
 
}
class Krug
{
    public int Diam { set; get; }
    public int X { set; get; }
    public int Y { set; get; }
    public Krug(int d, int x, int y)
    {
        this.Diam = d;
        this.X = x;
        this.Y = y;
    }
}
0
241 / 243 / 27
Регистрация: 30.01.2014
Сообщений: 1,145
Записей в блоге: 2
28.07.2016, 19:02  [ТС]
Хоть убейте - не понимаю.
Создал новый проект, там combobox с именем Diam и набором чисел. Копипаст всего кода, вставляю его после
C#
1
2
namespace WindowsFormsApplication1
{
запускаю. Результат: только комбобокс.
Гоню. Рисует.

Добавлено через 5 минут
Осталось только это переварить.
Вопросы дальше:
- окружность рисуем, хочется полупрозрачный круг;
- как сделать, чтобы после выбора другого значения рисовался круг вместо этого (ну вроде как уничтожался предыдущий)? Нарисовать такой же цветом фона - "не комильфо".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2016, 19:02
Помогаю со студенческими работами здесь

Имитация кругов на воде
Доброго времени суток! Есть задача. Разработать программу, имитирующую круги на воде: в случайных местах экрана возникают и начинают...

Оптимальное размещение кругов
Здравствуйте, не могу разобраться с реализацией оптимального размещения кругов на поверхности, методом штрафных функций. Можно просто...

Запись координат рисуемых кругов
Здравствуйте. Есть Windows Form, в которой - PictureBox. В нем рисуются круги при нажатии мышью. Координаты этих кругов записываются в...

Абсолютно упругое столкновение кругов
Как реализовать абсолютно упругое столкновение кругов. Например есть поле они по нему летают сталкиваются и отскакивают от граней и друг...

Вращение трех кругов по часовой стрелке
Есть три круга в Windows Forms, нужно организовать их вращение по часовой стрелке по таймеру. using System; using System.Drawing; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru