Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195

Поправьте код так, чтобы он рисовал прямоугольник не только слева направо

20.01.2012, 13:12. Показов 1556. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            try
            {
                Bitmap bitmap = new Bitmap(pictureBox1.Image);
                savePicture(bitmap, rect);
                rect.X = 0;
                rect.Y = 0;
                rect.Width = 0;
                rect.Height = 0;
                Hide();
                (Owner as Form1).Show();
                (Owner as Form1).Visible = true;
                (Owner as Form1).ShowInTaskbar = true;
                
                (Owner as Form1).Activate(); //так есть же о_О 
                (Owner as Form1).WindowState = FormWindowState.Normal;
            }
            catch { }
            
        }
 
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            using (Pen pen = new Pen(Color.Red, 2))
            {
                e.Graphics.DrawRectangle(pen, rect);   
                pictureBox1.Invalidate(); 
            }
        }
 
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                
                int x = Math.Min(rect.Left,e.X - rect.Left);
                int y=  Math.Min(rect.Top,e.Y - rect.Top);
                int w = Math.Max(rect.Left, e.X - rect.Left);
                int h = Math.Max(rect.Top, e.Y - rect.Top);
 
                rect = new Rectangle(rect.Left, rect.Top, e.X - rect.Left, e.Y - rect.Top);//Задает размер при движении пока не отпустишь.
            }
        }
 
        private void pictureBox1_MouseDown_1(object sender, MouseEventArgs e)
        {
            try
            {
                rect = new Rectangle(e.X, e.Y, 0, 0);
                pictureBox1.Invalidate();
            }
            catch { }
        }
 
    }
}
Ребят, выручите, пожалуйста, поправьте код так, чтобы он рисовал прямоугольник не только слева направо. С 8 утра бьюсь, а так ничего и не решил. Весь гугл облазил, там объясняют конечно, но я так реализовать и не смог.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2012, 13:12
Ответы с готовыми решениями:

Каждое слово преобразовать так, чтобы оно читалось слева направо
Помогите решить задачу: Дана последовательность из n символов, состоящую из нескольких слов. Каждое слово преобразовать так, чтобы оно...

Переделать, чтобы время двигалось по диагонали слева направо
program pr10; uses crt,dos; var i,j,n,x,y:integer; s,a,b,c:string; h,m,sec,s100:word; procedure...

Используя только div и mod, записать цифры числа по порядку слева направо
Дано натуральное число N. Используя только div и mod написать цифры числа по порядку слева направо. Нужно чтобы программа состояла из...

10
c#
 Аватар для temich-92
95 / 95 / 27
Регистрация: 25.03.2011
Сообщений: 290
20.01.2012, 14:08
по mouse_down запоминай начальные координаты, width и height по mouse_up

Добавлено через 18 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
Rectangle rect;
 
mouse_down(блабла)
{
    rect=new Rectangle(e.x,e.y,0,0,);
}
 
mouse_up(блабла)
{
    rect.width=rect.x-e.x;
rect.height=rect.y-e.y;
//дальше рисуй drawrectangle(pen,rect);
}
0
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
20.01.2012, 14:42  [ТС]
Не помогло.
Как я понимаю, надо вот тут изменять:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
  private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                
                int x = Math.Min(rect.Left,e.X - rect.Left);
                int y=  Math.Min(rect.Top,e.Y - rect.Top);
                int w = Math.Max(rect.Left, e.X - rect.Left);
                int h = Math.Max(rect.Top, e.Y - rect.Top);
 
                rect = new Rectangle(rect.Left, rect.Top, e.X - rect.Left, e.Y - rect.Top);//Задает размер при движении пока не отпустишь.
            }
        }
А именно:
C#
1
2
3
4
 int x = Math.Min(rect.Left,e.X - rect.Left);
                int y=  Math.Min(rect.Top,e.Y - rect.Top);
                int w = Math.Max(rect.Left, e.X - rect.Left);
                int h = Math.Max(rect.Top, e.Y - rect.Top);
Но как правильно...
0
 Аватар для hotkey
19 / 17 / 5
Регистрация: 06.09.2011
Сообщений: 51
20.01.2012, 14:47
KiberQ,
C#
1
2
3
4
5
x = Math.Min(x1, x2);
y = Math.Min(y1, y2);
w = Math.Abs(x1-x2);
h = Math.Abs(y1-y2);
rect = new Rectangle(x, y, w, h);
я бы так сделал
0
Заблокирован
20.01.2012, 15:00
Следующий код только мне одному кажеться странным?
C#
1
2
3
4
5
6
7
8
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            using (Pen pen = new Pen(Color.Red, 2))
            {
                e.Graphics.DrawRectangle(pen, rect);   
                pictureBox1.Invalidate();//убрать 
            }
        }
Посмотрите, как ваш процессор себя чуствует с этим кодом.(через диспетчер)
0
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
20.01.2012, 15:20  [ТС]
Бред какой-то получился.

Добавлено через 53 секунды
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
Следующий код только мне одному кажеться странным?
C#
1
2
3
4
5
6
7
8
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            using (Pen pen = new Pen(Color.Red, 2))
            {
                e.Graphics.DrawRectangle(pen, rect);   
                pictureBox1.Invalidate();//убрать 
            }
        }
Посмотрите, как ваш процессор себя чуствует с этим кодом.(через диспетчер)
Пример из книжки.

Добавлено через 19 минут
Ну, ребят, неужели нет идей? =/
Миниатюры
Поправьте код так, чтобы он рисовал прямоугольник не только слева направо  
0
Заблокирован
20.01.2012, 15:42
попробуйте
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
        int x1, x2, y1, y2;
        bool f = false;
 
        void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            f = false;
        }
 
        void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            x2 = e.X;// -x1;
            y2 = e.Y;// -y1;
            pictureBox1.Invalidate();
        }
 
        void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            x1 = e.X;
            y1 = e.Y;
            f = true;
        }
        
        void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (f)
            {
                e.Graphics.DrawRectangle(new Pen(Color.Red, 2),
                    x1 < x2 ? x1 : x2, y1 < y2 ? y1 : y2, Math.Abs(x1 - x2), Math.Abs(y1 - y2));
            }
        }
1
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
20.01.2012, 15:59  [ТС]
Сейчас попробую

Добавлено через 9 минут
Работает Но теперь перестала срабатывать функция, что ниже. Ошибку выдаёт. Как я понимаю, проблема в том, что туда не попадают размеры, верно? А как это исправить?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void savePicture(Bitmap srcBitmap, Rectangle section)
        {
            try
            {
                Bitmap bmpSave = new Bitmap(section.Width, section.Height);
                Graphics g = Graphics.FromImage(bmpSave);
                g.DrawImage(srcBitmap, 0, 0, section, GraphicsUnit.Pixel);
                g.Dispose();
                Image_1 = new Bitmap(bmpSave);
                (Owner as Form1).pictureBox1.Image = Image_1;
                Image_1.Save(Owner.Controls["textBox1"].Text + "FSreen.png", ImageFormat.Png);
                Form1.put = Form1.put + "FSreen.png";
            }
            finally { }
        }
0
Заблокирован
20.01.2012, 16:16
вы рассказывайте, в какой строке ошибка и что в ней пишеться.
здесь может g.Dispose(); после Form1.put... поставить
может в
C#
1
Image_1 = new Bitmap(bmpSave);
что подправить, например, явно привести битмап к имаджу
может еще что

трудно сказать без сообщения ошибки и тестирования.
1
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
20.01.2012, 16:31  [ТС]
Все, все решил, спасибо

Добавлено через 11 минут
А вот такой вопрос еще. У меня две формы есть. Одна главная, другая нет. Вот надо сделать так, чтобы при нажатии на кнопку, что находится на не основной форме, вызвать событие клик на кнопке, что находится на главной форме. Как это сделать?
0
Заблокирован
20.01.2012, 16:45
Ответы на 7 самых частых вопроса по WinForms
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2012, 16:45
Помогаю со студенческими работами здесь

Как в графике сделать, чтобы на оси абсцисс диапазон шёл от 40 до 0 (слева направо)
Как в MathCAD в графике сделать чтобы на оси абсцисс диапазон шёл например: от 40 до 0 (слева направо) ?

Создать массив, который одинаково читается как слева направо, так и справа налево (Палиндром)
Подскажите алгоритм работы задачи. Нужно создать массив, который одинаково читается как слева направо, так и справа налево.

Палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево
Программа получает на вход одно натуральное число N, не превосходящее 100 000. Программа должна вывести одно натуральное число — N-е в...

Каждое слово текста преобразовать таким образом, чтобы оно читалось слева направо
Каждое слово текста преобразовать таким образом, чтобы оно читалось слева направо.

Каждое слово текста преобразовать таким образом, чтобы оно читалось слева направо
Каждое слово текста преобразовать таким образом, чтобы оно читалось слева направо. Добавлено через 1 час 20 минут Помогите


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
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 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru