こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VisualStudio 2008 Express

無料でネットからダウンロードしたVisualStudio 2008 Express Edition のフォームをつかってGUIの勉強をしています。

非情報系学生のための C/C++ 入門 というサイトにある コースの 「第三回  GUI と画像処理プログラミング 」をやってみましたが、フォーム上のボタンを押せばメッセージボックスが出てくるはずなのに、何も起こりません。 何が原因なのかわかりません。詳しい方、どうか知恵を貸してください。 
ちなみにそのサイトのアドレスは以下のとおりです。

http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/prog1/index.html

ボタンをフォームに貼り付けると自動的に生成されるイベントハンドラーに、自分の追加した部分も含めたヘッダーファイルの内容を下に乗せておきます。

// ***************************
// Form1.h file

#pragma once

namespace MyGUI_NET {

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
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}

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

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->SuspendLayout();
//
// button1
//
this->button1->BackColor = System::Drawing::Color::PeachPuff;
this->button1->Location = System::Drawing::Point(34, 35);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(185, 55);
this->button1->TabIndex = 0;
this->button1->Text = L"click me";
this->button1->UseVisualStyleBackColor = false;
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 266);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);

}
#pragma endregion // event handler for button 1
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
MessageBox::Show("こんにちは"); // 自分が追加した一行
}
};
}

//******************

どうぞよろしくお願いします。

投稿日時 - 2011-12-04 07:05:02

QNo.7170034

すぐに回答ほしいです

質問者が選んだベストアンサー

普通はイベントハンドラが作成されるとき(デザインモードでボタンをダブルクリックしたり、プロパティウィンドウのイベント名を入力したりしたとき)、自動的にイベントとイベントハンドラの関連付けがされるはずですが、イベントハンドラが作成された後で、一度デザインモードでボタンを削除されたりしたのではないでしょうか。

デザインモードで button1 を選択した状態で、プロパティウィンドウ(表示されていなければメニューの「表示」→「プロパティウィンドウ」)のイベントボタン(カミナリのアイコン)をクリックし、「Click」の行のコンボボックスから「button1_Click」を選択するか、直接、
this->button1->UseVisualStyleBackColor = false;
の直後あたりに
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
を追加すれば、button1 クリックイベントが動作すると思います。

投稿日時 - 2011-12-04 10:01:27

お礼

早速お返事いただいて、有難うございます。
確かに、いろいろと実験的にいじくり回している間に、一度ボタンを消した記憶があります。その後またボタンを追加したので問題はないと安易に考えていたようです。
教えていただいた方法でClickのコンボボックスからbutton1_Clickを選択して、再度ビルドし、メッセージボックスが出ました。いい勉強になりました。

投稿日時 - 2011-12-04 11:35:45

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
>{
...
>}

は、もしかして自分でタイプされたのでしょうか、それとも
そのサイトに書かれているように「ボタンをダブルクリック」されたのでしょうか?

たぶんイベントハンドラーの登録がされていないだけだと思いますが
プロパティウインドウの稲妻ぽいアイコンをクリックして
Clickの内容を調べてみて、button1_Click以外であればbutton1_Clickに変更してみてください。

投稿日時 - 2011-12-04 10:22:06

お礼

早速お返事いただいて、有難うございます。
掲載しましたプログラムコードは、自分で追加した1行の他はすべて自動的に生成されたものです。 教えていただいた方法でClickのコンボボックスからbutton1_Clickを選択して、再度ビルドし、メッセージボックスが出ました。いい勉強になりました。
第一回答者さんと同様の内容で、いずれもベストアンサーとしたいところですが、第一回答者さんのほうが若干早かったということで、そちらのほうをベストアンサーに選ばせていただきます。しかし私が感じる感謝の気持ちはどちらも全く同じですので、悪しからずご了承ください。本当に有難うございました。

投稿日時 - 2011-12-04 11:44:37