※ ChatGPTを利用し、要約された質問です(原文:Windowsフォームの表示)
Windowsフォームの表示
このQ&Aのポイント
Visual C++ 2005(Express Edition)を使用して、Windowsフォームを表示する方法について教えてください。
Form1.h、Form2.h、Form3.hの3つのフォームを作成し、ボタンをクリックすると別のフォームが表示されるようにしたいです。
しかし、Form2とForm3は名前空間に存在しないというエラーが発生します。正しい書き方を教えてください。
Visual C++ 2005(Express Edition)で、windowsフォームを3個作りました。
1個目をForm1.h、2個目をForm2.h、3個目をForm3.h、メインプロジェクトは、Sample.cpp,
ファイルとします。
Form1にボタンbutton1を作成し、ボタンをクリックしたイベントが発生したとき、Form2を表示させます。
Form2には、ボタンbutton2があります。
Form1と同様に、Form2のボタンをクリックするとForm3の画面が表示されるようにします。
ところが、以下のソースファイルで書いたところ、Form2とForm3は、名前空間に存在しませんという意味のエラーが生じます。
Form2とForm3をインスタンス化し、Show()メッソドで、画面を表示させる方法です。
しかし、Form1とForm2だけのファイルですと、先のソースの書き方で上手くいきます。
何か、書き方が異なるのでしょうか?正しい書き方を教えてくださいますとありがたいです。
なお、C++/CLIの文法に沿った、ソースコードでお願いします。
<ソースファイル>
----Form1.h-----------------------------
#pragma once
#include "stdafx.h"
#include "Form2.h"
#include "Form3.h"
namespace Sample {
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>
/// Form1 の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
//button1を作成
//省略
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2^ a = gcnew Form2();
a->Show();
}
};
}
[EOF]
---------------------------------------
----Form2.h----------------------------
#pragma once
#include "Form1.h"
#include "Form3.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace Sample {
/// <summary>
/// IsotopeInput の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class Form2 : public System::Windows::Forms::Form
{
//button2を作成
//省略
}
#pragma endregion
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
Form3^ b = gcnew Form3();
b->Show();
}
};
}
[EOF]
---------------------------------------
-------Form3.h--------------------------
#pragma once
#include "stdafx.h"
#include "Form1.h"
#include "Form2.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace Sample {
/// <summary>
/// Result の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class Form3 : public System::Windows::Forms::Form
{
//省略
}
#pragma endregion
};
}
[EOF]
---------------------------------------------------------
Sample.cpp-----------------------------------------------
// Sample.cpp : メイン プロジェクト ファイルです。
#include "stdafx.h"
#include "Form1.h"
#include "Form2.h"
#include "Form3.h"
using namespace Sample;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}
[EOF]
------------------------------------------------------------
お礼
回答ありがとうございます。 fresh homepieさんの方法でやりましたら成功しました。 ヘッダーファイルの事も詳しく説明されていて、こちらの方も、新たな知識を得たと感じています。 私は、独学でVc++プログラミングをやっています。 こういうかゆい点まで説明している、VC++の本がほとんど無くて、困っています。