VC++でクラスからメソッドを作る方法 – プログラミング – Home

VC++でクラスからメソッドを作る方法
 
通知
すべてクリア

VC++でクラスからメソッドを作る方法


Team AziOGroup
 Team AziOGroup
(@Team AziOGroup)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

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);

}

---------------------------------------------------


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

↓こんなんでいいのかしら

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);
}
...
};


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

OKWaveでもみかけたな。マルチポストは僕は大嫌いだ。


返信引用
Team AziOGroup
 Team AziOGroup
(@Team AziOGroup)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

回答ありがとうございます。
マルチポストは今後気をつけます・・・

回答なんですが、
そのコードは Form1.h のコードですよね?
私が書きたいのはObj.h または Obj.cpp なんですが・・・


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

> 私が書きたいのはObj.h または Obj.cpp なんですが・・・

だから? 同じでしょ?


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

俺.NETやってないから判らんのだけど
クラスだとthisが使えないって意味が判らん

推測だけど

.NETのObjectクラスの派生クラスのインスタンスじゃないからってことか

中継すればいいのかな

C++/CLIでアンマネージクラスの非静的メンバをデリゲートにする
http://d.hatena.ne.jp/yuaaa/20080507/1210174504


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

> クラスだとthisが使えないって意味が判らん

「クラスメソッド(=staticメンバ関数)だと this がないけど、どーすんの?」
ってことのようです。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

なるほど、そういうことか。
thisが使いたくて困っているのではなく
staticメンバ関数を使いたくて困っているってことか。

C#のデリゲートって
C言語のコールバックみたいにthisなしの使い方もできるし
this付きでメソッドを指定もできるのが便利だよね。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

どういう事がしたくて別のしかもFormとは特に関係無いクラスで
Form上にコントロールを配置したいのか?
という部分が書かれていないので何とも。

特に意味無しならformの方で書かないと駄目でも結論にはなるのかな。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました