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

Повторная прорисовка в элементе

07.12.2016, 17:05. Показов 1122. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Перейду сразу к сути: есть элемент-контейнер, в котором содержатся переменные для прорисовки линии. При нажатии на кнопку, вызываются функции, которые линию рисуют в элементе panel. Проблема в том, что если изменить параметры для линии, и снова нажать на кнопку, рисуется новая линия поверх (или рядом) со старой. Как сделать так, чтобы при новом нажатии на кнопку прорисовывалось по новому, а не, по сути, рисовалось поверх уже существующего? Заранее благодарю.

За
P.S. Если возможно, то приведите пример, как с помощью нажатия кнопки вызвать повторно вызвать то же PanelPaint-событие. В плане работы с делегатами и событиями совсем профан.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2016, 17:05
Ответы с готовыми решениями:

Плавная прорисовка графиков на элементе ЧАРТ
Всем доброго времени суток. Имеется следующая проблема, на элементе ЧАРТ я прорисовываю график линейной функции, параллельной оси X....

Как в элементе управления CListCtrl поймать нажатие определенной клавиши на элементе?
Поймать нажатие клавиши вообще - несложно: BOOL CSysbackupDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { ...

Повторная загрузка
Есть код по загрузке файла. <form enctype="multipart/form-data" action="check.php" method="post"> <input type="hidden"...

2
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
07.12.2016, 17:45
Цитата Сообщение от Terr_a Посмотреть сообщение
Доброго времени суток. Перейду сразу к сути: есть элемент-контейнер, в котором содержатся переменные для прорисовки линии. При нажатии на кнопку, вызываются функции, которые линию рисуют в элементе panel. Проблема в том, что если изменить параметры для линии, и снова нажать на кнопку, рисуется новая линия поверх (или рядом) со старой. Как сделать так, чтобы при новом нажатии на кнопку прорисовывалось по новому, а не, по сути, рисовалось поверх уже существующего? Заранее благодарю.
А код покажите? Или на ромашках гадать будем?
0
0 / 0 / 1
Регистрация: 11.08.2016
Сообщений: 10
07.12.2016, 18:33  [ТС]
Лучший ответ Сообщение было отмечено Terr_a как решение

Решение

Пожалуйста.
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
    public partial class MainForm : Form
    {
        Programmwahl[] meineSaetze = new Programmwahl[16];  //  Dekleration der Programmsaetze
        ushort[] u_GCode = new ushort[16];  // GCode-Satz von allen Programmwaehle
        double[] d_DurchmesserX = new double[16];   // DurchmesserX-Satz von allen Programmwaehle
        double[] d_LaengeZ = new double[16];    // LaengeZ-Satz von allen Programmwaehle
        double[] d_LaengeU = new double[16]; // LaengeU-Satz von allen Programmwaehle
        double[] d_Radius = new double[16]; //  Radiussatz von allen Programmwaehle
        bool[] b_InhaltsVorhanden = new bool[16];    //  Variablensatz, der Inhalt der Sätze prüft
 
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            timer1.Enabled = true;
            SatznummerEinrichten();
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
 
 
        private void SatznummerEinrichten()
        {
            meineSaetze[0] = programmwahl1;
            meineSaetze[1] = programmwahl2;
            meineSaetze[2] = programmwahl3;
            meineSaetze[3] = programmwahl4;
            meineSaetze[4] = programmwahl5;
            meineSaetze[5] = programmwahl6;
            meineSaetze[6] = programmwahl7;
            meineSaetze[7] = programmwahl8;
            meineSaetze[8] = programmwahl9;
            meineSaetze[9] = programmwahl10;
            meineSaetze[10] = programmwahl11;
            meineSaetze[11] = programmwahl12;
            meineSaetze[12] = programmwahl13;
            meineSaetze[13] = programmwahl14;
            meineSaetze[14] = programmwahl15;
            meineSaetze[15] = programmwahl16;
            for (int i = 0; i < 16; i++)
            {
                meineSaetze[i].SatznummerAnordnung(i+1);
            }
        }
        
        void Timer1Tick(object sender, EventArgs e)
        {
 
        }
 
        void Panel1Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            int i_KoeffizientSkalierung;
            try
            {
                i_KoeffizientSkalierung = Convert.ToInt32((panel1.Width - 40) / ClassGlobal.dLaenge);
            }
            catch
            {
                i_KoeffizientSkalierung = 0;
            }           
            Pen pStift = new Pen(Color.Black);
            Point pStartPunkt = new Point(20, (panel1.Size.Height / 2) - Convert.ToInt32(i_KoeffizientSkalierung * ClassGlobal.dDurchmesser / 2));
            Size s1 = new Size(panel1.Width - 40, Convert.ToInt32(i_KoeffizientSkalierung * ClassGlobal.dDurchmesser));
            Rectangle r1 = new Rectangle(pStartPunkt, s1);
            g.DrawRectangle(pStift, r1);
 
            g.Dispose();
        }
 
        void ButtonAktivierenClick(object sender, EventArgs e)
        {
            Point pTest = new Point(-Convert.ToInt32(ClassGlobal.dLaenge), -Convert.ToInt32(ClassGlobal.dDurchmesser));
            ParameterUebernahme();
        }
 
 
        private void ParameterUebernahme()
        {
            for (int i = 0; i < 16; i++)
            {
                u_GCode[i] = meineSaetze[i].uGcode;
                d_DurchmesserX[i] = meineSaetze[i].dDurchmesserX;
                d_LaengeZ[i] = meineSaetze[i].dLaengeZ;
                d_LaengeU[i] = meineSaetze[i].dLaengeU;
                d_Radius[i] = meineSaetze[i].dRadius;
                if (u_GCode[i] == 5 || d_DurchmesserX[i] == 0 || d_LaengeZ[i] == 0 || d_Radius[i] == 0)
                {
                    b_InhaltsVorhanden[i] = false;
                }
                else
                {
                    b_InhaltsVorhanden[i] = true;
                }
                if (i > 0)
                {
                    DarstellungKonturen(u_GCode[i], d_DurchmesserX[i - 1], d_LaengeZ[i - 1], d_DurchmesserX[i], d_LaengeZ[i]);
                }
            }
        }
 
 
        private void DarstellungKonturen(ushort u_gCode, double d_durchmesserXVorherig, double d_LaengeZVorherig, double d_durchmesserXAktuell, double d_LaengeZAktuell)
        {
            if (u_gCode != 5)
            {
 
                switch (u_gCode)
                {
                    case 0 :
                        break;
                    case 1 :
                        KonturLinie(d_durchmesserXVorherig,  d_LaengeZVorherig, d_durchmesserXAktuell, d_LaengeZAktuell);
                        break;
                    case 2 :
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                }
            }            
        }
 
 
 
        private void KonturLinie(double startPunktX, double startPunktZ, double endePunktX, double endePunktZ)
        {
            Graphics g = panel1.CreateGraphics();
            Pen pStift = new Pen(Color.Red);
            int i_startPunktX = Convert.ToInt32(startPunktX);
            int i_startPunktZ = Convert.ToInt32(startPunktZ);
            int i_endePunktX = Convert.ToInt32(endePunktX);
            int i_endePunktZ = Convert.ToInt32(endePunktZ);
            g.DrawLine(pStift, i_startPunktX, i_startPunktZ, i_endePunktX, i_endePunktZ);
            g.Dispose();
        }
 
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2016, 18:33
Помогаю со студенческими работами здесь

Повторная авторизация
Здравствуйте! Имеется авторизация на сайте, где данные записываются в сессию. Дальше стоит проверка, если есть сессия, то вход выполнен....

Повторная анимация
здравствуйте! столкнулась с такой проблемой: при повторном переходе на слайд анимация не повторяется. на простом примере: на первом...

Повторная авторизация
Здравствуйте! Недавно начал изучать PHP(ну как недавно - поставили перед фактом, что я должен его знать). Сейчас делаю сайтик на курсач. ...

Повторная авторизация .
Подскажите в чём может быть проблема , к примеру я авторизируюсь без www вот так site.ru А если переходу на свой сайт с www.site.ru...

Повторная индексация
Такая ситуация. Есть сайт, к котором используются идентификаторы сессий в адресах. Он первоначально так и проиндексировался - в адресах...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru