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

Повторный запуск программы

27.04.2022, 20:11. Показов 860. Ответов 2
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Программа рисует фигуры по заданным координатам. Проблема в том, что если после первого нажатия на кнопку button1 bpvtybnm несколько координат, и опять нажать на кнопку, то новые фигуры не рисуются. Помогите пожалуйста исправить.

Класс Koordinat.h
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
#pragma once
class Koordinat
{
private:
    int koord1;
    int koord2;
    int koord3;
 
public: 
    
    Koordinat()
    {}
    Koordinat(int k1, int k2, int k3)
    {
        koord1 = k1;
        koord2 = k2;
        koord3 = k3;
    }
    
    int raznost()
    {
        int razn;
        razn = koord1 - koord2;
        return razn;
    }
    int raznostandsum()
    {
        int raznsum;
        raznsum = koord1 + koord2 - koord3;
        return raznsum;
    }
    ~Koordinat()
    {}
};
MyForm.h

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
144
145
146
147
#pragma endregion
        int prX1, prY1;
        int okX, okY, okR;
        int tr1X, tr1Y, tr2X, tr2Y, tr3X, tr3Y;
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 
    {
        try
        {
            okX = Convert::ToInt32(textBox1->Text);
            okY = Convert::ToInt32(textBox2->Text);
            okR = Convert::ToInt32(textBox3->Text);
            prX1 = Convert::ToInt32(textBox6->Text);
            prY1 = Convert::ToInt32(textBox7->Text);
            tr1X = Convert::ToInt32(textBox4->Text);
            tr1Y = Convert::ToInt32(textBox5->Text);
            tr2X = Convert::ToInt32(textBox6->Text);
            tr2Y = Convert::ToInt32(textBox7->Text);
            tr3X = Convert::ToInt32(textBox8->Text);
            tr3Y = Convert::ToInt32(textBox9->Text);
            if ((okX > panel1->Width) || (okY > panel1->Height) || (tr1X > panel1->Width) || (tr1Y > panel1->Height) || (tr2X > panel1->Width) || (tr2Y > panel1->Height) || (tr3X > panel1->Width) || (tr3Y > panel1->Height)) throw 1;
        }
        catch (...) {
            MessageBox::Show("Ошибка ввода, повторите ввод координат.");
            textBox1->Text = "";
            textBox2->Text = "";
            textBox3->Text = "";
            textBox4->Text = "";
            textBox5->Text = "";
            textBox6->Text = "";
            textBox7->Text = "";
            textBox8->Text = "";
            textBox9->Text = "";
            return;
        }
 
        try 
        {
            tr1X = Convert::ToInt32(textBox4->Text);
            tr1Y = Convert::ToInt32(textBox5->Text);
            tr2X = Convert::ToInt32(textBox6->Text);
            tr2Y = Convert::ToInt32(textBox7->Text);
            tr3X = Convert::ToInt32(textBox8->Text);
            tr3Y = Convert::ToInt32(textBox9->Text);
            if ((tr2X - tr1X != tr3X - tr2X) || (tr1Y - tr2Y != tr3Y - tr2Y)) throw 1;
        }
        catch (...)
        {
            MessageBox::Show("Ошибка ввода, треугольник должен быть равнобедренным.");
            textBox4->Text = "";
            textBox5->Text = "";
            textBox6->Text = "";
            textBox7->Text = "";
            textBox8->Text = "";
            textBox9->Text = "";
            return;
        }
        
        panel1->Visible = true;
    }
private: System::Void panel1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) 
{
    int prX2, prY2; // координаты прямой
    int ptrX, ptrY, pWidth, pHeight; //координаты прямоуг. для тр
    int pX, pY, width, height; // координаты для общего прямоуг.
    Koordinat a(tr3X, tr1X, 0);
    Koordinat b(tr1Y, tr2Y, 0);
    prX2 = prX1;
    prY2 = tr1Y;
    if ((okX-okR >= tr1X) && (okX + okR <= tr3X) && (okY-okR >= tr2Y) && (okY + okR <= tr1Y)) // окружность находится внутри треугольника
    {
        ptrX = tr1X;
        ptrY = tr2Y;
        pWidth = a.raznost();
        pHeight = b.raznost();
        
    }
    else if ((okX - okR <= tr1X) && (okX + okR >= tr3X) && (okY - okR <= tr2Y) && (okY + okR >= tr1Y))  // треугольник находится внутри окружности
    {
        ptrX = tr1X;
        ptrY = tr2Y;
        pWidth = a.raznost();
        pHeight = b.raznost();
    }
    else
    {
        ptrX = tr1X;
        ptrY = tr2Y;
        pWidth = a.raznost();
        pHeight = b.raznost();
        if (okX - okR < tr1X) // левый край окружности левее треугольника
        {
            Koordinat c(okX, okR, 0);
            pX = c.raznost();
        }
        else
            pX = tr1X;
        if (okY - okR < tr2Y) // верхний край окружности выше треугольника
        {
            Koordinat c(okY, okR, 0);
            pY = c.raznost();
        }
        else
            pY = tr2Y;
        if (okX + okR > tr3X) // правый край окружности правее треугольника
        {
            Koordinat d(okX, okR, pX);
            width = d.raznostandsum();
        }
        else
        {
            Koordinat c(tr3X, pX, 0);
            width = c.raznost();
        }
        if (okY + okR > tr1Y)  // верхний край окружности выше треугольника
        {
            Koordinat d(okY, okR, pY);
            height = d.raznostandsum();
        }
        else
        {
            Koordinat c(tr1Y, pY, 0);
            height = c.raznost();
        }
    }
    
    Pen^ pen = gcnew Pen(Color::Black);
    Pen^ penok = gcnew Pen(Color::Red);
    Pen^ pentr = gcnew Pen(Color::Green);
    Pen^ penpr = gcnew Pen(Color::Blue);
    e->Graphics->DrawEllipse(pen, okX-okR, okY-okR, okR*2, okR*2); // рисует окружность
    Rectangle rectOk(okX-okR, okY-okR, okR*2, okR*2);  // рисует прямоугольник для окружности
    e->Graphics->DrawRectangle(penok, rectOk);
    Rectangle rectTr(ptrX, ptrY, pWidth, pHeight);  // рисует прямоугольник для треугольника
    e->Graphics->DrawRectangle(pentr, rectTr);
    Rectangle rect(pX, pY, width, height);  // рисует общий прямоугольник
    e->Graphics->DrawRectangle(penpr, rect);
    e->Graphics->DrawLine(pen, tr1X, tr1Y, tr2X, tr2Y);
    e->Graphics->DrawLine(pen, tr2X, tr2Y, tr3X, tr3Y);
    e->Graphics->DrawLine(pen, tr3X, tr3Y, tr1X, tr1Y);
    e->Graphics->DrawLine(pen, prX1, prY1, prX2, prY2);
}
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) 
{
    panel1->Visible = false;
}
};
}
Добавлено через 3 часа 16 минут
Цитата Сообщение от nz2003 Посмотреть сообщение
Проблема в том, что если после первого нажатия на кнопку button1 bpvtybnm несколько координат, и опять нажать на кнопку, то новые фигуры не рисуются. Помогите пожалуйста исправить.
Проблема в том, что если после первого нажатия на кнопку button1 ИЗМЕНИТЬ несколько координат, и опять нажать на кнопку, то новые фигуры не рисуются. Помогите пожалуйста исправить.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2022, 20:11
Ответы с готовыми решениями:

Предотвратить повторный запуск программы
Приветствую Возникла проблема: Если запустить program.exe ещё раз (когда один экземпляр уже запущен) то возникает ошибка. Вопрос: ...

Запрет на повторный запуск программы
Ничего, работающего на wpf, не нашел. Ну не считая использования мьютекса, где-то в каком-то далеком файле проекта. В этой ветке находил...

Как запретить повторный запуск программы
При загрузке формы запретить запуск этой формы еще раз , допустим что бы выводило &quot;Это программа уже запущена!&quot;.

2
2395 / 1924 / 763
Регистрация: 27.07.2012
Сообщений: 5,569
27.04.2022, 21:54
Лучший ответ Сообщение было отмечено nz2003 как решение

Решение

Цитата Сообщение от nz2003 Посмотреть сообщение
Помогите пожалуйста исправить.
Потому что panel1_Paint вызывается только при перерисовке panel1. В первый раз вы устанавливаете его свойство Visible и он перерисовывается. Во второй раз это свойство уже не меняется и перерисовки нет. Можете в начале нажатия на кнопку делать panel1->Visible = false. Возможно, поможет. Но кривее способа сложно было придумать.
0
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 68
27.04.2022, 22:11  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Потому что panel1_Paint вызывается только при перерисовке panel1. В первый раз вы устанавливаете его свойство Visible и он перерисовывается. Во второй раз это свойство уже не меняется и перерисовки нет. Можете в начале нажатия на кнопку делать panel1->Visible = false. Возможно, поможет. Но кривее способа сложно было придумать.
Все работает, большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2022, 22:11
Помогаю со студенческими работами здесь

Повторный запуск программы с функцией plotyy
Здравствуйте! Помогите пожалуйста. Вот часть моей программы: pd2=P2(1,1:razm); pd3=P3(1,1:razm); =plotyy(t,i_k,t,qN); ...

Повторный запуск main() равен перезапуску программы?
Добрый день. Если в коде какой либо функции я вызову main() c которой у меня начинается выполнение программы, то будет ли это равно...

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

Повторный запуск
На работе создал скрипт-программу backup.ps1 которая бекапит базу пользователей каждые 30 минут, выполняет некоторые обработки и сохраняет...

Повторный запуск цикла
Всем доброго времени суток. Не нашел решения на форуме. Подскажите, в чем проблема с задачкой-кодом: всю голову уже сломал. ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru