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

Создание квадрата в указанном месте, нужно кое-что поправить в коде

21.06.2018, 02:44. Показов 2132. Ответов 5
Метки нет (Все метки)

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

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private void panel1_MouseClick(object sender, MouseEventArgs e)
        {
 
            {
                MouseEventArgs c = new MouseEventArgs(MouseButtons.Left, 1, (int)numericUpDown1.Value, (int)numericUpDown1.Value, 0);
                Graphics a = Graphics.FromHwnd(panel1.Handle);
                a.FillRectangle(Brushes.DarkCyan, c.X, c.Y, c.Location.X, c.Location.Y);
 
                Environment.ExitCode.ToString();
            }
                
 
            Graphics b = Graphics.FromHwnd(panel1.Handle);
            b.FillRectangle(Brushes.DarkCyan, e.X, e.Y, 40, 100);
            
        }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2018, 02:44
Ответы с готовыми решениями:

Народ, нужно исправить кое что в коде сам не могу понять
Вот код программы, все вроде окей, но препод докапался нужно что бы при выводе h есть 0 он будет выдавать ошибку. У меня выдает ошибку...

Создание каталога в указанном месте
Здравствуйте, подскажите пожалуйста, как с помощью .Bat файла (который находится на диске E:\) создать папку на рабочем столе. Заранее...

Создание папки в указанном месте и ее отображение в TreeView
Всем привет, подскажите как сделать что бы программа при нажатии кнопки "Создать проект" создала папку проекта в...

5
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
21.06.2018, 03:11
Так не делают. Рисовать нужно в событии Paint. Принудительно его можно вызвать методом Invalidate
Цитата Сообщение от darkvenger34 Посмотреть сообщение
после указания ширины и высоты( я сделал через нумерик ап дауны(1,2) ), появлялся 2 квадрат
У квадрата ширина и высота равны.

Не совсем понятно, что за первый квадрат. Приведённый код, мало того, что не оформлен, так ещё и не рабочий.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
21.06.2018, 04:23

Не по теме:

Цитата Сообщение от darkvenger34 Посмотреть сообщение
вообщем
нет такого слова, или "в общем" или "вообще".



Далее,
1) Зачем создавать a и b? Пользуйтесь только a (если конечно у вас изначально нет задачи в двух дискрипторах)
2) Как вам верно заметили - квадрат имеет одинаковые стороны
3) Для чего вам "MouseEventArgs c" если уже есть "MouseEventArgs e"?
4) "Environment.ExitCode.ToString();" - зачем?

Само задание не понял, если задание нарисовать 2 квадрата - рисуйте, если задание - нарисовать два квадрата один после другого по клику мышкой, то делайте любой флаг public static bool firstClickFlag = ; например, и меняйте его после первого клика и через if/else выводите два квадрата в разной последовательности. В общем как только услышим задание, сможем что-то сказать определенное.
0
2 / 2 / 0
Регистрация: 30.09.2017
Сообщений: 82
21.06.2018, 13:07  [ТС]
Задание нарисовать квдарат:
1) 1 квадрат должен нарисоваться с настроенными размерами
2) после того, как указали расположение квадрат мышкой или кликой, при 2 клике должен создаться 2 квадрат, но со значениями указанными в коде, вот так задание

Добавлено через 19 минут
У меня данный код работает, могу скинь конечно сам проект, ну я думаю, вам это не нужно.
Вообщем при запуске программы я задаю в 2 numeric updown размеры ширины и высоты, допустим 100 100, кликаю мышкой на panel и в этой области и появляется квадрат 100, 100 и следом за ним, появляется тот квадрат который в коде. А мне нужно, чтобы 2 квадрат( с размерами 40,40) появлялся так же после щелчка мыши на panel.
ну сейчас скину сюда целый код:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApp7
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        
 
 
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            
        }
 
        private void numericUpDown2_ValueChanged(object sender, EventArgs e)
        {
 
        }
 
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
 
        }
 
        private void panel1_MouseClick(object sender, MouseEventArgs e)
        {
 
            {
                MouseEventArgs c = new MouseEventArgs(MouseButtons.Left, 1, (int)numericUpDown1.Value, (int)numericUpDown1.Value, 0);
                Graphics a = Graphics.FromHwnd(panel1.Handle);
                a.FillRectangle(Brushes.DarkCyan, c.X, c.Y, c.Location.X, c.Location.Y);
 
                Environment.ExitCode.ToString();
            }
                Graphics b = Graphics.FromHwnd(panel1.Handle);
                
                b.FillRectangle(Brushes.DarkCyan, e.X, e.Y, 40, 40);
            
            
        }
 
        
    }
    }
Вот весь код
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
21.06.2018, 17:46
Лучший ответ Сообщение было отмечено darkvenger34 как решение

Решение

В общем, как и сказал belalugoci, нужен булевый флаг, чтобы различать первый и второй клик. По этому флагу запоминаем вторую точку клика и рисуем квадрат, прописанный в коде. примерно так:
Кликните здесь для просмотра всего текста
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
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        panel1.MouseClick += Panel1_MouseClick;
        panel1.Paint += Panel1_Paint;
    }
 
    private void Panel1_Paint(object sender, PaintEventArgs e)
    {
        if (firstClickPoint == Point.Empty) return;
 
        e.Graphics.FillRectangle(Brushes.DarkCyan, firstClickPoint.X, firstClickPoint.Y, (float)widthNumericUpDown.Value, (float)heightNumericUpDown.Value);
        if (secondClickPoint != Point.Empty)
        {
            e.Graphics.FillRectangle(Brushes.DarkCyan, secondClickPoint.X, secondClickPoint.Y, 40, 40);
        }
        isSecondClick = !isSecondClick;
    }
 
    private void Panel1_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            if (isSecondClick)
            {
                secondClickPoint = e.Location;
            }
            else
            {
                firstClickPoint = e.Location;
                secondClickPoint = Point.Empty;
            }
            panel1.Invalidate();
        }
    }
 
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        heightNumericUpDown.Maximum = decimal.MaxValue;
        widthNumericUpDown.Maximum = decimal.MaxValue;
    }
 
    Point firstClickPoint;
    Point secondClickPoint;
    bool isSecondClick;
 
}
Вложения
Тип файла: zip WindowsFormsApp1.zip (12.5 Кб, 8 просмотров)
1
2 / 2 / 0
Регистрация: 30.09.2017
Сообщений: 82
21.06.2018, 21:02  [ТС]
Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2018, 21:02
Помогаю со студенческими работами здесь

Создание файла со списком папок в указанном месте
ребята помогите) задание такое: Создание файла со списком папок в указанном месте. вот код документа .vbs Dim...

парни нужно кое-что добавить (нужно что бы эта программа вычисляла среднее арифметическое чисел)
нужно что бы эта программа вычисляла среднее арифметическое чисел, общую сумму, максимальное и минимальлное я сделала, буду очень...

Что поправить в коде?
Задание:1) вывести количество строк, содержащих 0 2) номер столбца, в котором содержится самая длинная серия одинаковых...

Нужно кое-что исправить ООП С++
Задание: Создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов,...

Просьба поправить, что неправильно понимаю в коде
using System; using System.Drawing; using System.Windows.Forms; namespace Example1_1 { public partial class Form1 : Form ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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 из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru