Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Злобный Зайц
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462

Не появляется полигон

19.10.2020, 15:01. Показов 1276. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По клику на форме создаётся объект, который должен рисовать полигон на форме. Объект благополучно создаётся, подписывается на событие Paint формы, но полигон на форме не отрисовывается. Если поставить брек-понит в 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
 
namespace PalcoFont
{
    class palca
    {
        public palca(Form1 f1,Point location)
        {
            rect = new Rectangle(location, new Size(40, 40));
            f1.Paint += new System.Windows.Forms.PaintEventHandler(f1_Paint);
            f1.MouseMove += new System.Windows.Forms.MouseEventHandler(f1_MouseMove);
            newBody();
        }
 
        void f1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            
        }
 
        void f1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            e.Graphics.FillPolygon(new SolidBrush(Color.DarkBlue), body.PathPoints);
        }
 
        int thick = 10;
        Rectangle rect;
        GraphicsPath body;
        void newBody()
        {
            Point[] points = new Point[6];
            byte[] types = { 0, 1, 1, 1, 1, 1 };
            points[0] = rect.Location;
            points[1] = points[0]; points[1].Offset(0, thick);
            points[5] = points[0]; points[5].Offset(thick, 0);
            points[3] = points[0]; points[3].Offset((Point)rect.Size);
            points[2] = points[3]; points[2].Offset(-thick, 0);
            points[4] = points[3]; points[4].Offset(0, -thick);
            body = new GraphicsPath(points, types);
        }
    }
}
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
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 PalcoFont
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            new palca(this, e.Location);
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2020, 15:01
Ответы с готовыми решениями:

Непонятки с Canvas: Появляется полигон и сразу же пропадает
Имеется код: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, ...

Полигон питания и полигон земли по разные стороны текстолита
Народ, подскажите плиз. Развожу тут плату одну, сделал так, что под 64-ногой TQFP есть полинон земли, к которой все земляные выводы микрухи...

Полигон
В Паскале вот этот "страх" решите пожалуйста) буду оч благодарна... Дан полигон, необязательно выпуклый. Дана точка P с координатами...

2
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
19.10.2020, 17:33
Лучший ответ Сообщение было отмечено Злобный Зайц как решение

Решение

1. Чтобы перерисовать форму, нужно вызывать методо Invalidate
2. Создаваемые тобой объекты нигде не хранятся, а значит, рано или поздно, будут удалены сборщиком мусора
3. Не нужно обрабатывать прорисовку формы без её ведома. Нужно из события прорисовки вызывать соответствующий метод класса.
См. пример.
Вложения
Тип файла: zip DrawSample.zip (8.7 Кб, 3 просмотров)
1
 Аватар для Злобный Зайц
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
20.10.2020, 11:09  [ТС]
Благодарю за ответ. Принял всё к сведению, переделал. На данном этапе всё работает. Но это только начало. Дальше мне нужно, чтобы каждое тело можно было бы поворачивать, растягивать/сжимать по длине, таская за один конец, чтобы оно поворачивалось вокруг второго конца. Не могу придумать, как это можно сделать. Что-нибудь можете подсказать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2020, 11:09
Помогаю со студенческими работами здесь

полигон
помогите почему addpolнgon добавляет полигоны и осуществляет операцию xor хотя там нету в параметрах ничего кроме полигона.

Кликабельный полигон
Доброго всем здоровья! Искал по теме информацию, но, ничего толком нет ни в пределах форума, ни "на просторах..." Хотел...

Второй полигон
Нарисовал один полигон игрока. Все в порядке. Рисую за ним полигон противника он рисуется, но создается частое его мелькание. В чем...

Незакрытый полигон
Помогите, пожалуйста, решить задачу. Из какой области математики она? Условие: Существует некоторое количество N точек на...

Полигон из массива
Организовать ввод координат точек в табличной форме, сохранить данные в массиве или в Tlist (на выбор пользователя), использовать массив...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник 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 Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru