質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.10%

Windowフォームアプリケーションについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 104

mutani

score 18

掲題の件、サイト(http://jeanne.wankuma.com/tips/cpp/form/show.html)を確認しながらフォームを閉じようと試みたのですがコンパイルエラーとなってしまいます。
下記に詳しく記載いたします。

#pragma once

namespace Prefectures {

    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>
    /// MyForm の概要
    /// </summary>
    public ref class MyForm : public System::Windows::Forms::Form
    {
    public:
        MyForm(void)
        {
            InitializeComponent();
            //
            //TODO: ここにコンストラクター コードを追加します
            //
        }

    protected:
        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        ~MyForm()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^ button1;
    private: System::Windows::Forms::Button^ button2;
    protected:

    private:
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->button2 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(25, 54);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(186, 63);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &MyForm::Button1_Click);
            // 
            // button2
            // 
            this->button2->Location = System::Drawing::Point(98, 161);
            this->button2->Name = L"button2";
            this->button2->Size = System::Drawing::Size(75, 23);
            this->button2->TabIndex = 1;
            this->button2->Text = L"button2";
            this->button2->UseVisualStyleBackColor = true;
            // 
            // MyForm
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 261);
            this->Controls->Add(this->button2);
            this->Controls->Add(this->button1);
            this->Name = L"MyForm";
            this->Text = L"MyForm";
            this->ResumeLayout(false);

        }

#pragma endregion


    private: System::Void Button1_Click(System::Object^ sender, System::EventArgs^ e) {
        MyForm^ MyForm = gcnew MyForm();
                MyForm->Close();
    }
    };
}

上記ソースコードの以下の箇所で「E0079型指定子が必要です」となってしまいます。
MyForm^ MyForm = gcnew MyForm();

ご教授のほどよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

エラー自体は MyFormと言うクラス名と変数名を同時に使うようなコードになってしまっている為です。

    // NG: こうではなく
    MyForm^ MyForm = gcnew MyForm();
    MyForm->Close();

    // OK: こうする。
    MyForm^ form = gcnew MyForm();
    form->Close();

更に言えば、質問者さんの本当に意図するところはbutton1をクリックすることでMyFormウィンドウをCloseすることでしょうから、gcnew MyForm() で新たにMyFormウィンドウを作ってCloseで閉じても希望どおりの動作をしないと思います。

既に開いている自ウィンドウを閉じるわけですから、this->Close()が正しいのだと思います。

private: System::Void Button1_Click(System::Object^ sender, System::EventArgs^ e) {
    // NG: こうではなく、
    // MyForm^ MyForm = gcnew MyForm();
    // MyForm->Close();

    // NG: 更に、こうでもなく、
    // MyForm^ form = gcnew MyForm();
    // form->Close();

    // OK: こう。
    this->Close();
}

更に老婆心からですが、C++/CLIはこれからWindowsプログラミング用に使う言語としては推奨されるものではないので、製品の保守や、C#などで作られたマネージコードとの相互運用が必要な状況など、使わざるを得ない状況でない限り新たに使い始めることはお勧めできません。C#やVB.NETなどの利用を検討しましょう。

Microsoftサポート - Visual Studio 2012、2013 で Visual C++ の Windows フォーム アプリケーション テンプレートが削除され、新規に作成できない

マイクロソフトでは、Visual C++ (C++/CLI) を使用した Windows フォームアプリケーションの作成は、推奨しておりません。

C++/CLI は、マネージ コード と アンマネージ コードの相互運用を行う目的でのみ使用してください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる