1

Тема: Windows form C++/CLI ListBox

Переписую приклад програми і все зробив як написано в книжці

https://books.google.com.ua/books?id=xk … mp;f=false

100 сторінка

#pragma once

namespace Project4 {

    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>
    /// Сводка для MyForm9
    /// </summary>
    public ref class MyForm9 : public System::Windows::Forms::Form
    {
    public:
        MyForm9(void)
        {
            InitializeComponent();
            listBox1->Sorted = true;
            
            // получить имя каталога "Мои рисунки"
            DirectoryInfo^ di; // каталог
            di = gcnew DirectoryInfo(Environment::GetFolderPath(
                Environment::SpecialFolder::MyPictures)); 
            aPath = di->FullName;
            label1->Text = aPath;
            FillListBox(aPath);
            //
            //TODO: добавьте код конструктора
            //
        }
    private:  String^ aPath;    // путь к файлам картинок 
    private:  System::Boolean FillListBox(String^ aPath) {
        // информация о каталоге
        DirectoryInfo^ di = gcnew DirectoryInfo(aPath); 

      // информация о файлах
        
        array<FileInfo^> ^fi = di->GetFiles("*.jpg"); 

      // очистить список listBox1
        listBox1->Items->Clear(); 

      // Добавляем в listBox1 имена jpg-файлов,
      // содержащихся в каталоге aPath
        for each (FileInfo^ fc in fi)
        { 
            listBox1->Items->Add(fc->Name);
        } 

        label1->Text = aPath;

        if (fi->Length == 0) return false;   else {
            // выбираем первый файл из полученного списка
            listBox1->SelectedIndex = 0;
            return true;
        }
    } 

      // щелчок на кнопке Папка

    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~MyForm9()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::ListBox^  listBox1;
    private:  String^ aPath;    // путь к файлам картинок 
    protected:
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::PictureBox^  pictureBox1;
    private: System::Windows::Forms::Label^  label1;

    private:
        /// <summary>
        /// Обязательная переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Требуемый метод для поддержки конструктора — не изменяйте 
        /// содержимое этого метода с помощью редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->listBox1 = (gcnew System::Windows::Forms::ListBox());
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
            this->label1 = (gcnew System::Windows::Forms::Label());
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit();
            this->SuspendLayout();
            // 
            // listBox1
            // 
            this->listBox1->FormattingEnabled = true;
            this->listBox1->Location = System::Drawing::Point(49, 40);
            this->listBox1->Name = L"listBox1";
            this->listBox1->Size = System::Drawing::Size(120, 264);
            this->listBox1->TabIndex = 0;
            this->listBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &MyForm9::listBox1_SelectedIndexChanged);
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(49, 340);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 1;
            this->button1->Text = L"Папка...";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &MyForm9::button1_Click);
            // 
            // pictureBox1
            // 
            this->pictureBox1->Location = System::Drawing::Point(203, 40);
            this->pictureBox1->Name = L"pictureBox1";
            this->pictureBox1->Size = System::Drawing::Size(489, 323);
            this->pictureBox1->TabIndex = 2;
            this->pictureBox1->TabStop = false;
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Location = System::Drawing::Point(49, 13);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(35, 13);
            this->label1->TabIndex = 3;
            this->label1->Text = L"label1";
            // 
            // MyForm9
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(718, 502);
            this->Controls->Add(this->label1);
            this->Controls->Add(this->pictureBox1);
            this->Controls->Add(this->button1);
            this->Controls->Add(this->listBox1);
            this->Name = L"MyForm9";
            this->Text = L"MyForm9";
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->EndInit();
            this->ResumeLayout(false);
            this->PerformLayout();

        }
#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        FolderBrowserDialog^ fb = gcnew FolderBrowserDialog();
        fb->Description = "Выберите папку,\n" + "в которой находятся иллюстрации";
        fb->ShowNewFolderButton = false;

        fb->SelectedPath = aPath;

        // Отобразить окно Обзор папок и проверить,
        // щелчком на какой кнопке пользователь закрыл его
        if (fb->ShowDialog() == System::Windows::Forms::DialogResult::OK)
        {     
            // пользователь выбрал каталог и щелкнул на кнопке OK
            aPath = fb->SelectedPath;
            label1->Text = aPath; 

        if (!FillListBox(fb->SelectedPath))
            // в каталоге нет файлов иллюстраций
            pictureBox1->Image = nullptr;
        }
    }
private: System::Void listBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {
    pictureBox1->Visible = false;

    // загружаем изображение в pictureBox1
    pictureBox1->Image = gcnew Bitmap(aPath + "\\" +
        listBox1->SelectedItem->ToString()); 

    if ((pictureBox1->Image->Width > pictureBox1->Size.Width) || (pictureBox1->Image->Height > pictureBox1->Size.Height))
    {
        // масштабируем
        pictureBox1->SizeMode = PictureBoxSizeMode::Zoom;
    }   else
    {
        // масштабировать не надо
        pictureBox1->SizeMode = PictureBoxSizeMode::CenterImage;
    }   pictureBox1->Visible = true; 
}
};
}
Помилки (pос.)

Серьезность    Код    Описание    Проект    Файл    Строка    Состояние подавления
Сообщение        Данные, необходимые для завершения этой операции еще не доступны. (Исключение из HRESULT: 0x8000000A)            0   
Сообщение        Данные, необходимые для завершения этой операции еще не доступны. (Исключение из HRESULT: 0x8000000A)            0   
Сообщение        Данные, необходимые для завершения этой операции еще не доступны. (Исключение из HRESULT: 0x8000000A)            0   
Ошибка    C2059    синтаксическая ошибка: >    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    41   
Ошибка    C2059    синтаксическая ошибка: )    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    48   
Ошибка    C2059    синтаксическая ошибка: ;    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    50   
Ошибка    C2059    синтаксическая ошибка: if    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    55   
Ошибка    C2059    синтаксическая ошибка: else    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    55   
Ошибка    C2059    синтаксическая ошибка: }    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    193   
Ошибка    C2061    синтаксическая ошибка: идентификатор "DirectoryInfo"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    25   
Ошибка    C2061    синтаксическая ошибка: идентификатор "DirectoryInfo"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    37   
Ошибка    C2065    DirectoryInfo: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    24   
Ошибка    C2065    di: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    24   
Ошибка    C2065    di: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    25   
Ошибка    C2065    di: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    27   
Ошибка    C2065    DirectoryInfo: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    37   
Ошибка    C2065    di: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    37   
Ошибка    C2065    FileInfo: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    41   
Ошибка    C2065    di: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    41   
Ошибка    C2065    fc: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    48   
Ошибка    C2065    in: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    48   
Ошибка    C2065    fc: необъявленный идентификатор    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    50   
Ошибка    C2086    System::String ^Project4::MyForm9::aPath: переопределение    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    76   
Ошибка    C2143    синтаксическая ошибка: отсутствие "in" перед "^"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    48   
Ошибка    C2143    синтаксическая ошибка: отсутствие ";" перед "{"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    55   
Ошибка    C2143    синтаксическая ошибка: отсутствие ";" перед "}"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    193   
Ошибка    C2146    синтаксическая ошибка: отсутствие ")" перед идентификатором "in"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    48   
Ошибка    C2146    синтаксическая ошибка: отсутствие ";" перед идентификатором "fi"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    48   
Ошибка    C2146    синтаксическая ошибка: отсутствие ";" перед идентификатором "Text"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    53   
Ошибка    C2447    {: отсутствует заголовок функции (возможно, используется формальный список старого типа)    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    55   
Ошибка    C2872    Text: неоднозначный символ    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    53   
Ошибка    C3192    синтаксическая ошибка: "^" не является префиксным оператором (возможно, имелось в виду "*"?)    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    48   
Ошибка    C3613    отсутствует тип возвращаемого значения после "->" (предполагается int)    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    53   
Ошибка    C3699    ^: это косвенное обращение невозможно использовать для типа "unknown-type"    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    41   
Ошибка    C3927    "->": использование завершающего возвращаемого типа не допускается после декларатора, который не является функцией    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    53   
Ошибка    C4430    отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию    Project4    d:\навчання\c++\ооп лабораторні с++\lab_2\project4\myform9.h    53   
Ошибка (активно)    E0020    идентификатор "DirectoryInfo" не определен    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    24   
Ошибка (активно)    E0020    идентификатор "di" не определен    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    24   
Ошибка (активно)    E0020    идентификатор "DirectoryInfo" не определен    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    37   
Ошибка (активно)    E0020    идентификатор "di" не определен    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    37   
Ошибка (активно)    E0020    идентификатор "FileInfo" не определен    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    41   
Ошибка (активно)    E0020    идентификатор "FileInfo" не определен    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    48   
Ошибка (активно)    E0079    требуется спецификатор типа    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    25   
Ошибка (активно)    E0079    требуется спецификатор типа    Project4    D:\Навчання\C++\ООП Лабораторні С++\Lab_2\Project4\MyForm9.h    37

2 Востаннє редагувалося ur_naz (03.03.2020 21:25:51)

Re: Windows form C++/CLI ListBox

проблема у тому, що ти копіюєш частки коду з книги, а требя взяти сирці з диску, що додається до книги

3

Re: Windows form C++/CLI ListBox

Почнемо з помилок C2065:

  • DirectoryInfo: не оголошений ідентифікатор

  • FileInfo: не оголошений ідентифікатор

Для використання цих класів потрібно дописати

using namespace System::IO;
Подякували: cryoffiar, LoganRoss2

4

Re: Windows form C++/CLI ListBox

ur_naz написав:

проблема у тому, що ти копіюєш частки коду з книги, а требя взяти сирці з диску, що додається до книги

Google не роздає диски для читачів відсканованованих матеріалів.

Подякували: cryoffiar, koala, LoganRoss3