1

Я использую C++. В настоящее время я разрабатываю программу с формами окон. У меня проблема с обработчиками событий. особенно обработчик события клика для сохранения и открытия файла. Я искал сеть и не нашел достойного объяснения, как писать эти обработчики событий. Поэтому я прошу дать четкое определение.Сохранить и открыть файл Диалоги

Пожалуйста, не отправляйте меня в Microsoft, так как они не предоставляют образец обработчиков обработанных событий только частично.

+0

@InfinityCounter: поскольку вопрос был закрыт (это просто так, это не ваша вина) Я отправил ** [код ответа] (http://pastie.org/6466699) ** на pastie.org. См. Длинную строку комментария, показывающую, как добавить обработчик события клика, и код внизу для запуска диалогового окна открытия файла. –

+0

@InfinityCounter, так как вы ясно дали понять, что используете C++, у меня возникает ощущение, что вы на самом деле используете C++/CLI, что совсем другое. – chris

+0

@chris: OP * обязательно * с использованием некоторого расширения языка Microsoft, а не из чистого стандартного C++. вот почему вопрос помечен visual C++. а также winforms. –

ответ

5

Поскольку это не очевидно на первый взгляд, что Visual Studio 2012 не поддерживает C++ приложения/CLI Winform, несмотря на то, что ОП, конечно, знает, что это, для других читателей, вот как я создал один раз, чтобы ответить на этот вопрос:

  1. В Visual Studio 2012 в диалоговом окне «Новый проект» я выбрал [Visual C++> CLR> CLR Empty Project].

  2. В новом проекте я добавил обычную функцию C++ main и Windows Form.

  3. В настройках компоновщика я изменил его с подсистемы консоли на подсистему графического интерфейса (и из-за нестандартного поведения компоновщика Microsoft, скорректировал точку входа на mainCRTStartup).

Ниже приведено сгенерированное заголовком Winform с кодом обработчика событий, который запускает диалог открытия файла, добавленный вручную.

  • В длинной строке комментария ------ показано, как подключить обработчик событий.

  • Код внизу показывает как код обработчика событий, так и как запускать диалоговое окно открытого файла.

#pragma once 

namespace CppWindowsFormsApplication { 

    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> 
    /// Summary for MainWindow 
    /// </summary> 
    public ref class MainWindow : public System::Windows::Forms::Form 
    { 
    public: 
     MainWindow(void) 
     { 
      InitializeComponent(); 
      // 
      //TODO: Add the constructor code here 
      // 
     } 

    protected: 
     /// <summary> 
     /// Clean up any resources being used. 
     /// </summary> 
     ~MainWindow() 
     { 
      if (components) 
      { 
       delete components; 
      } 
     } 
    private: System::Windows::Forms::Button^ button1; 
    protected: 

    private: 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     System::ComponentModel::Container ^components; 

#pragma region Windows Form Designer generated code 
     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     void InitializeComponent(void) 
     { 
      this->button1 = (gcnew System::Windows::Forms::Button()); 
      this->SuspendLayout(); 
      // 
      // button1 
      // 
      this->button1->Location = System::Drawing::Point(149, 208); 
      this->button1->Name = L"button1"; 
      this->button1->Size = System::Drawing::Size(75, 23); 
      this->button1->TabIndex = 0; 
      this->button1->Text = L"&Open file"; 
      this->button1->UseVisualStyleBackColor = true; 

      // ---------------------------------------------------- !Adds event handler ------------------- 
      this->button1->Click += gcnew System::EventHandler(this, &MainWindow::button1_Click); 
      // 
      // MainWindow 
      // 
      this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 
      this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 
      this->ClientSize = System::Drawing::Size(284, 262); 
      this->Controls->Add(this->button1); 
      this->Name = L"MainWindow"; 
      this->Text = L"MainWindow"; 
      this->ResumeLayout(false); 

     } 
#pragma endregion 
    private: 
     System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 
     { 
      OpenFileDialog^ sfd = gcnew OpenFileDialog(); 
      sfd->Filter = "Text Files|*.txt|All Files|*.*"; 
      if(sfd->ShowDialog() != System::Windows::Forms::DialogResult::OK) 
      { 
       return; 
      } 
      //MessageBox::Show(sfd->FileName); 
      MessageBox::Show("OK"); 
     } 
    }; 
} 

Я не исправить отступы и т.д., так как у меня не было времени; почти весь этот код был сгенерирован RAD (Visual Studio 2012) RAD ( Rabid Application Development).


относящихся к этому вопросу ’ сек истории, теперь удалены:

Я действительно не было времени, чтобы ответить на этот вопрос. Я бы предпочел позволить кому-то еще ответить на него (и получить от него какую-то репутацию). Это такой простой вопрос, что я уверен, что если бы это было так быстро, любое количество читателей, с большим количеством времени, чем я, ответил бы на это.

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

Я искренне прошу каждого читателя , пожалуйста, не проголосуйте, чтобы закрыть, что вы нанесли ’ t понять.

Только голосуйте, чтобы закрыть вопрос, когда вы полностью поймете предмет, и можете доказать себе и другим, что сообщество лучше с закрытым вопросом.

Невозможно понять вопрос не обязательно означает, что вопрос неточен.

+0

Я понимаю, что вы хотите выразить свое мнение о закрытии на SO неправильно, но пользователям, которые приходят сюда, чтобы получить помощь по аналогичным вопросам, не помогает эта последняя часть. Это потребует тех, кто явно закрыл этот вопрос, чтобы проверить здесь свой ответ, а также прочитать это дополнение. ИМХО, это неправильное место для этой информации. – Default

+1

@Default: нет, я не хочу «выразить свое мнение», это вводит в заблуждение. я просто делаю то, что лучше для сообщества. ваше заявление о читателях, заканчивающихся здесь, чтобы получить ответ, буквально корректно, но не имеет значения и вводит в заблуждение. ваше заявление о требованиях к любому эффекту, просто неверно. но это «формально» неправильное место для этой информации. вместо этого с помощью эффективных правил SO он должен быть размещен там, где он не достигнет ни одной из релевантной аудитории, а именно, в мета. –

+0

Я не уверен, как это вводит в заблуждение. Ответ для меня должен содержать ответ и информацию, связанную с ответом. Заявление, хотя может быть необходимо выделить, «пожалуйста, не закрывайте вопросы, если вы не понимаете, почему» (где «вопросы» могут относиться к ** любому ** вопросу, а не только к этому), мне , не отвечает на вопрос. Вот почему я чувствую, что это избыточно. – Default

Смежные вопросы