Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531

WinForms связать программу и PictureBox

21.02.2023, 16:41. Показов 1756. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал изучать Windows Forms и никак не могу понять, как связать между собой два события. У меня есть функция get_file() , которая находит автоматически картинку в папке и возвращает путь. Дальше если картинка найдена мне нужно чтобы она загрузилась в pictureBox_1 но никак не могу понять, как это сделать, как связать между собой код.

//файл MainWindow.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
#pragma once
 
namespace WindowsTestProject {
 
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
 
/// <summary>
/// Сводка для MainWindow
/// </summary>
public ref class MainWindow : public System::Windows::Forms::Form
{
    public:
    MainWindow(void)
    {
        InitializeComponent();
        //
        //TODO: добавьте код конструктора
        //
    }
 
    protected:
    /// <summary>
    /// Освободить все используемые ресурсы.
    /// </summary>
    ~MainWindow()
    {
        if (components)
        {
            delete components;
        }
    }
    private: System::Windows::Forms::PictureBox^ pictureBox_1;
    protected:
 
    private:
    /// <summary>
    /// Обязательная переменная конструктора.
    /// </summary>
    System::ComponentModel::Container ^components;
 
    #pragma region Windows Form Designer generated code
    /// <summary>
    /// Требуемый метод для поддержки конструктора — не изменяйте
    /// содержимое этого метода с помощью редактора кода.
    /// </summary>
    void InitializeComponent(void)
    {
        System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(MainWindow::typeid));
        this->pictureBox_1 = (gcnew System::Windows::Forms::PictureBox());
        (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox_1))->BeginInit();
        this->SuspendLayout();
        //
        // pictureBox_1
        //
        this->pictureBox_1->BackColor = System::Drawing::SystemColors::ControlDarkDark;
        this->pictureBox_1->Location = System::Drawing::Point(12, 12);
        this->pictureBox_1->Name = L"pictureBox_1";
        this->pictureBox_1->Size = System::Drawing::Size(400, 500);
        this->pictureBox_1->TabIndex = 0;
        this->pictureBox_1->TabStop = false;
        this->pictureBox_1->Click += gcnew System::EventHandler(this, &MainWindow::pictureBox_1_Click);
        //
        // MainWindow
        //
        this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
        this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
        this->BackColor = System::Drawing::SystemColors::ActiveBorder;
        this->ClientSize = System::Drawing::Size(784, 561);
        this->Controls->Add(this->pictureBox_1);
        this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
        this->Icon = (cli::safe_cast<System::Drawing::Icon^>(resources->GetObject(L"$this.Icon")));
        this->Name = L"MainWindow";
        this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
        this->Text = L"MainWindow";
        (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox_1))->EndInit();
        this->ResumeLayout(false);
 
    }
    
    #pragma endregion
            private: System::Void pictureBox_1_Click(System::Object^ sender, System::EventArgs^ e) {
               //для изображений
            }
        };
}

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
#include "MainWindow.h"
#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
 
using namespace std;
using namespace System;
using namespace System::Windows::Forms;
 
[STAThreadAttribute]
 
    string get_file() {
            string gf_fn = "NaN"
            string gf_path = "data/data_img/new_img";
            string gf_display = gf_path;
            
            replace(gf_display.begin(), gf_display.end(), '/', '\\');
            
                //___________________________________________________________________
                //"Каталог по умолчанию для хранения картинок: "data\data_img\new_img\"
                //Тип файлов: *.jpg"
                
            int gf_result = 0;
            
            for (const auto& gf_dir : std::filesystem::directory_iterator{ gf_path })
            {
                gf_fn = gf_dir.path().string();
                gf_fn.erase(0, 22);
                
                if (gf_fn.substr(gf_fn.find_last_of(".")) == ".jpg") {
                    gf_result = 1;
                    gf_fn = gf_path + gf_fn;
                    break;
                }
            }
            if (gf_result != 1) { gf_fn = "NaN"; }
            return gf_fn;
        }
 
int main(array<String^>^ args) {
    
    Application::SetCompatibleTextRenderingDefault(false);
    Application::EnableVisualStyles();
    WindowsTestProject::MainWindow form;
    Application::Run(% form);
 
    while(1){
        if(get_file() != "NaN"){
            //найдена картинка
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.02.2023, 16:41
Ответы с готовыми решениями:

Альтернатива PictureBox WinForms
Привет всем! Подскажите, пожалуйста, существует ли какая-то бесплатная альтернатива PictureBox, в котором можно было бы использовать...

Смена картинки в picturebox winforms по нажатию правой/левой кнопки мыши
как реализовать смену картинки по правому или левому/нажатию кнопки мыши? Помогите плиз

Связать comboBox и pictureBox
Добрый вечер! Подскажите, пожалуйста, как можно связать comboBox и pictureBox? Чего я хочу добиться: при открытии формы pictureBox пуст, а...

14
Эксперт .NET
 Аватар для Rius
13112 / 7673 / 1674
Регистрация: 25.05.2015
Сообщений: 23,395
Записей в блоге: 14
21.02.2023, 17:02
Загрузить в Bitmap и назначить его свойству Image (вроде бы) контрола PictureBox.

А я вот не понимаю, если вы хорошо знаете C/C++, зачем вам Windows Forms?
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
21.02.2023, 17:31  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
А я вот не понимаю, если вы хорошо знаете C/C++, зачем вам Windows Forms?
вы ошиблись, я плохо знаю C++, я его только изучаю. Что-то тяжело даётся, что-то уже переварилось и устаканилось. Не знаю почему, но мне это нравится. Мозгу вернее нравится, порой пишу что-то и мозг просто отрубается от перегрузки информации, но порой не могу остановиться, словно одержим алгоритмом. Глупо наверное, писать свои ощущения.

Windows Forms мне нужно для того что бы создать оконное приложение. Т.е. до этого у меня было консольное приложение, но это неудобно и графически не очень выглядит. Вот сейчас перешёл к изучению Windows Forms. Щупаю его возможности.

Немного не понял, про назначение свойству.
0
Эксперт .NET
 Аватар для Rius
13112 / 7673 / 1674
Регистрация: 25.05.2015
Сообщений: 23,395
Записей в блоге: 14
21.02.2023, 17:47
Тогда я тем более не понимаю, зачем вы учите C++ на примере C++/CLR ? Он вообще не для этого.
Если задача - изучить C++, откажитесь от C++/CLR, пока не поздно.

Про свойство вот:
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
using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private string GetFile()
        {
            // Путь к каталогу картинок.
            var dir = Path.Combine(
                Path.GetDirectoryName(Application.ExecutablePath),
                "data/data_img/new_img");
            // Все файлы jpg во всех подкаталогах.
            var files = Directory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories);
            // Возвращаем первый попавшийся.
            return files.FirstOrDefault();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // Получаем путь к файлу.
            var file = GetFile();
            // Загружаем картинку.
            var bitmap = new Bitmap(file);
            // Помещаем её в контрол.
            this.pictureBox1.Image = bitmap;
        }
    }
}
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
21.02.2023, 18:26  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
откажитесь от C++/CLR, пока не поздно.
хорошо, тогда в какую сторону двигаться?
0
Эксперт .NET
 Аватар для Rius
13112 / 7673 / 1674
Регистрация: 25.05.2015
Сообщений: 23,395
Записей в блоге: 14
21.02.2023, 18:32
Если цель оконные приложения под винду, Windows Forms (а лучше WPF) , то - C# .Net.
Если же интересует C++ в первую очередь, но нужны окошки, то - C++ Qt.

Добавлено через 1 минуту
Ещё лучше знать всё. Но вот C++ по CLR учить не стоит.
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
22.02.2023, 13:58  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
C++ Qt.
- Qt платный вроде как.

Windows Forms и CLR это не связные разве вещи?
0
Эксперт .NET
 Аватар для Rius
13112 / 7673 / 1674
Регистрация: 25.05.2015
Сообщений: 23,395
Записей в блоге: 14
22.02.2023, 14:23
Qt есть под open source лицензией. На сайте их можно найти, если покопаться.
Они очень хотят, чтобы вы платили. Но наследие компании Nokia не даёт окончательно скатиться на платную основу.
-------------------------------------
Windows Forms это визуальная часть .Net фреймворка. Ещё есть WPF.

C# .Net, VB .Net и C++/CLI, и некоторые другие, - это языки на этой платформе (.Net).
Причём основным и развивающимся является C#. По нему больше всего информации (ответы на форумах, книги, блоги, уроки и т.п.).
VB .Net нужен был для новичков, мигрирующих с Visual Basic.
C++/CLI предполагался для простого включения старого C/C++ кода в приложения на платформе .Net.

Из этого следует :
  • Не на C# вы будете обречены писать заковыристый, многословный код. Много кода. Сравните выше ваш код (C++) и мой (C#).
  • Также вы будете обречены в любом случае учить синтаксис C# (иронично, да?), чтобы переводить имеющиеся на нём примеры на свой язык.
  • Вы всё равно не выучите C++, потому что постоянно будете скатываться к функциям фреймворка. Просто из-за необходимости взаимодействия с ним.

Добавлено через 3 минуты
Хотите Windows Forms - учите C#.
Хотите C++ - учите Qt. Там этого C++ много.
Выберете Windows Forms + C++/CLI - зря потратите время на обучение и после.
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
22.02.2023, 16:53  [ТС]
Хорошо, спасибо, теперь понял. Буду искать курсы по Qt в таком случае.
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
23.02.2023, 08:07  [ТС]
Ну вот уже один огромный минус в Qt невозможно подгружать картинку по пути, и менять эту картинку. Т.е. эту картинку нужно взять загрузить в resource, а затем указать путь из resource. Можно конечно указать полный путь с диском, видел что такой способ работает, но это означает, перенеси программу на другой компьютер и эта программа работать не будет.

У меня же, по задумке, программа автоматически сканирует папку, и как только там появилась картинка, он её подхватывает и загружает затем отображает.
0
Эксперт .NET
 Аватар для Rius
13112 / 7673 / 1674
Регистрация: 25.05.2015
Сообщений: 23,395
Записей в блоге: 14
23.02.2023, 08:20
Всё там возможно.
Это вообще в любом нормальном языке / фреймворке возможно.

Добавлено через 1 минуту
А вот ваша задумка со сканированием как раз не работает.
См. https://www.cyberforum.ru/blog... g5377.html
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
23.02.2023, 08:46  [ТС]
это ясно, только многие жалуются, что нужно указывать именно целый путь с указанием диска. Нужно ещё прикрутить умудриться библиотеки, openCV и библиотеки для работы с текстовыми файлами (txt).
0
Эксперт .NET
 Аватар для Rius
13112 / 7673 / 1674
Регистрация: 25.05.2015
Сообщений: 23,395
Записей в блоге: 14
23.02.2023, 09:48
Многие - это новички.
См. ссылку выше.

Эта "проблема" есть во всех средах, где существуют понятия "current directory" и "относительный путь".
И проблемой она является только для новичков, от непонимания этих понятий.
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
23.02.2023, 13:23  [ТС]
Опять эти запреты.

При попытке установить Qt
"Installation from this IP address is not allowed."

Занавес.
0
Эксперт .NET
 Аватар для Rius
13112 / 7673 / 1674
Регистрация: 25.05.2015
Сообщений: 23,395
Записей в блоге: 14
23.02.2023, 13:42
Воспользуйтесь VPN.
Здесь есть подфорум кутишников: https://www.cyberforum.ru/qt/ И они как-то справляются ведь?
Выжпрограммист или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2023, 13:42
Помогаю со студенческими работами здесь

Как перевести проект из WinForms в ASP.Net и чем заменить PictureBox и ListView
Добрый вечер У меня есть приложение на WinForms, необходимо сделать аналогичное в ASP.Net. Мне нужны аналоги для PictureBox (не...

Связать textbox и picturebox в обработчике события
Создаю 24 picturebox и 24 textbox на picturebox. Нужно событие, в котором при изменении значения в определенном текстбоксе, менялся...

Как связать Picturebox со строкой или полем DataGridView?
Уважаемые знатоки, пишу курсач используя Visual studio 2013 и язык C# Мне нужно связать Picturebox со строкой datagridview . Чтоб при...

Переписать программу на WinForms
Надо переделать программу под Forms,простенько так,чтобы при нажатии button выводило весь ответ,сделал бы сам,но не знаю форм using System;...

Вызвать консольное приложение C# из проекта winforms и дать команду завершения также из winforms
Добрый день ! у меня есть проект на C# на winforms. я написал также консольное приложение на C#. Хочу это консольное вызвать из...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru