Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
 Аватар для Shambal
5 / 5 / 0
Регистрация: 02.09.2011
Сообщений: 18

Не изменяется pictureBox после нажатия button

02.09.2011, 20:51. Показов 4250. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Столкнулся со следующей проблемой:
приходилось как-то работать с простеньким рисованием в C#, вот код:
C#
1
2
3
4
5
6
7
8
9
public void button1_Click(object sender, EventArgs e)
        {
                Pen pero;
                pero = new Pen(Color.Blue);
                Graphics graph;
                graph = pictureBox1.CreateGraphics();
                graph.Clear(Color.White);
                graph.DrawLine(pero, x1, y1, x2, y2);
         }
Сейчас пробую по нажатию кнопки на форме добавлять разные элементы в pictureBox, но используя Visual C++ (Windows Forms Application). Переделал примерно такой же код в С++:
C++
1
2
3
4
5
6
7
System::Void Form1::button1_Click(System::Object^  sender, System::EventArgs^  e) {
        Pen^ blackPen = gcnew Pen(Color::Black); 
        Graphics^ g = pictureBox1->CreateGraphics();
        g->Clear(Color::White);
        g->DrawLine(blackPen, 20, 20, pictureBox1->Width, pictureBox1->Height);
        pictureBox1->BackColor = Color::White;
    }
Компилятор не ругается, но после нажатия кнопки единственное, что появляется на pictureBox, - это белый фон. К сожалению, спустя много часов поисков, ничего по данному вопросу не нашёл. Есть примеры разные, но там рисование непосредственно в событии pictureBox_Paint, а мне нужно по нажатию кнопки.
Буду очень благодарен за помощь в решении проблемы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2011, 20:51
Ответы с готовыми решениями:

После нажатия клавиши Enter или нажатия на Button
Помогите пожалуйста.:-[ Задача: После нажатия клавиши Enter или нажатия на Button поле курсора переходит в соответствующий компонент...

Вывести результат после нажатия button
Есть код программки. Есть 2 товара и их цены. Клиент выбирает нужное количество товара. <?php $price_1 = 15.20; $price_2 = 10; ...

disable после 10-кратного нажатия на button
возможно ли, чтобы после того, как пользователь нажмет 10 раз на button, кнопка стала неактивной или вывелось сообщение об ошибке? и как...

2
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
03.09.2011, 00:50
Вот накидал по нажатию на кнопке будет выводиться сетка в элементе pictureBox
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
    int width   = pictureBox1->Width  / 10;
    int height  = pictureBox1->Height / 10;
    Pen^ pen  = gcnew  Pen(Color::Yellow);
    pictureBox1->Width  = width * 10+1;
    pictureBox1->Height = height * 10+1;
    Graphics^ dc = pictureBox1->CreateGraphics();
 
    SolidBrush^  br;   
    int step; 
    for(int x = 0; x < pictureBox1->Width; x += width) {
           step = 0;                         
           for(int y = 0; y < pictureBox1->Height; y += height, step++) {
                   br   = gcnew SolidBrush( Color::FromArgb(255 - step*20, 0, step*20) );
                   dc->DrawRectangle(pen, x, y, width, height);
                   dc->FillRectangle(br, x+1, y+1, width-1, height-1);
           }
    }
 }
Скриншотик вот такой.
Миниатюры
Не изменяется pictureBox после нажатия button  
2
 Аватар для Shambal
5 / 5 / 0
Регистрация: 02.09.2011
Сообщений: 18
03.09.2011, 11:09  [ТС]
Спасибо за помощь. Оказалось, проблема в другом, но Ваш код меня навёл на мысль. Попробовал создать новый проект, вставил Ваш код, всё работает. В программе, в которой вышеизложенная проблема, почему-то pictureBox реакцию подаёт только после второго нажатия на button. Скажите, пожалуйста, почему так происходит и, если можно, как это поправить.
P.S. Если попробовать добавить Invalidate() последней строкой кода нажатия кнопки, то он изменяет pictureBox в начальное состояние (т.е. без каких-либо рисунков).

Добавлено через 31 минуту
Только что разобрался, почему изменения происходят со второго нажатия, а не первого. Причина в том, что в программе pictureBox сделал visible->false, поэтому изменения видны только со второго раза, т.к. после первого нажатия он уже остаётся видимым. Сейчас поменял видимость на true, действительно так. Всё рисует красиво. Странный этот контрол. Думал, в нём изменения происходят независимо от того, видимый он или нет. Или я что-то неправильно понял? В любом случае если хочу обновить pictureBox (например, после изменения размера формы), он опять становится пустым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.09.2011, 11:09
Помогаю со студенческими работами здесь

Изменение label после нажатия button
Какой код нужно написать чтоб изменилась надпись (Label) после нажатия на button ? private: System::Void button1_Click(System::Object^...

Как вывести текст после нажатия на Button
Пытался я гуглить, из этого ничего не вышло, метод который был описан на одном из сайтов не работает. Помогите!

Смена цвета Edit и Form после нажатия на Button
При нажатии на Button не меняет цвет, в чем ошибся я? Пробовал место Form у Label цвет менять, у него меняет все. procedure...

После нажатия на button, кнопка остаётся в активном состоянии
Здравствуйте! В теме сложно было описать проблему, суть такова: При нажатии на button в обработчике события может сработать return....

Вызов Tooltip для input text после нажатия button
Добрый день, ночь или другое время суток заставшее вас. Вопрос в следующем. как активировать Tooltip для input text при нажатии...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru