Visual Studio 2008 で VC++ .NET を使って開発をしています。
クラスについて現在勉強しているんですけど、早速詰まってしまいました。
『クラス内のメソッドを呼び出す時に、Form1等のフォームを指定し、クラス側ではそのフォームにボタンを配
置する。
配置して、そのボタンをクリックされると、ダイアログで「Hello World!」と表示する』
このようなソフトを作りたいのです。(特に意味はなく、勉強したいため)
ボタンの配置までは出来るんですが、「クリックされると」の部分が出来ません。
今までは、(クラス使ってないときでは)
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
など、 EventHandlerにthisを与えていたのですが、クラスだとthisが使えなくて困っています。
分かる方お願いします
以下コード
---------------------------------------------------
Form1.h 内
#pragma once
#include Obj.h
namespace MakeObj {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
--中略--
this->Text = LForm1;
this->ResumeLayout(false);
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Obj::Make(this,this);
}
};
}
---------------------------------------------------
Obj.h (クラスのヘッダーファイル)内
#pragma once
ref class Obj
{
public:
Obj(void);
static void Make(System::Windows::Forms::Control^);
};
---------------------------------------------------
Obj.cpp (クラスの実装部分)内
#include StdAfx.h
#include Obj.h
Obj::Obj(void)
{
}
void Obj::Make(System::Windows::Forms::Control^ frm)
{
System::Windows::Forms::Button^ button2;
button2 = gcnew System::Windows::Forms::Button(); //ボタンインスタンス化
frm->Controls->Add(button2);
}
---------------------------------------------------
↓こんなんでいいのかしら
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
button1->Click += gcnew EventHandler(&Form1::Hello);
}
static void Hello(Object^,EventArgs^) {
MessageBox::Show(LHello, world);
}
...
};
OKWaveでもみかけたな。マルチポストは僕は大嫌いだ。
回答ありがとうございます。
マルチポストは今後気をつけます・・・
回答なんですが、
そのコードは Form1.h のコードですよね?
私が書きたいのはObj.h または Obj.cpp なんですが・・・
> 私が書きたいのはObj.h または Obj.cpp なんですが・・・
だから? 同じでしょ?
俺.NETやってないから判らんのだけど
クラスだとthisが使えないって意味が判らん
推測だけど
.NETのObjectクラスの派生クラスのインスタンスじゃないからってことか
中継すればいいのかな
C++/CLIでアンマネージクラスの非静的メンバをデリゲートにする
http://d.hatena.ne.jp/yuaaa/20080507/1210174504
> クラスだとthisが使えないって意味が判らん
「クラスメソッド(=staticメンバ関数)だと this がないけど、どーすんの?」
ってことのようです。
なるほど、そういうことか。
thisが使いたくて困っているのではなく
staticメンバ関数を使いたくて困っているってことか。
C#のデリゲートって
C言語のコールバックみたいにthisなしの使い方もできるし
this付きでメソッドを指定もできるのが便利だよね。
どういう事がしたくて別のしかもFormとは特に関係無いクラスで
Form上にコントロールを配置したいのか?
という部分が書かれていないので何とも。
特に意味無しならformの方で書かないと駄目でも結論にはなるのかな。