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

解決済みの質問

C++/CLIにてForm1の要素に外部から

C++/CLIにてForm1の要素に外部の関数からアクセスしたいです。

Windows7、Visual Studio2010にてC++/CLIで
簡単なフォームアプリケーションを作成しています。


仮に新規作成し、とりあえずテキストボックスを貼りつけたとします。

この際「Form1.h」が自動的に作成され、Form1クラスの中に
textBox1などの要素が自動的に作成されるかと思います。
Form1クラスのメソッドの中からそれにアクセスするには

this->textBox1->Text = L"変更";

みたいにするだけで良いですが、
こうしたForm1クラスの要素に対し、
Form1.h以外の場所にある外部の自作の関数から
アクセスを行うにはどのようにすれば良いのでしょうか。

投稿日時 - 2011-02-17 03:09:59

QNo.6528808

暇なときに回答ください

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

> Form1はこのApplication::Runの中で一時的に作成されているのみということなのでしょうか。

そういうことです。
ですから、外部に対してなんらかの形でフォームのオブジェクトを渡す必要があります。
まぁそこの部分を書き換えてもいいんですが、自動生成される部分にはなるべく手を加えない方がスマートです。

あと、外部関数ということはフォームとは別のスレッドからの制御になると思いますが、その場合単純に書き換えようとすると例外になります。
http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html

投稿日時 - 2011-02-17 09:12:19

お礼

返事が遅くなってしまいました。とても助かりました。どうもありがとうございます。

投稿日時 - 2011-04-12 17:43:41

ANo.2

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

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

回答(2)

ANo.1

Form1クラスに変更を行うメソッドを作り、自作関数からそのメソッドを呼び出しましょう。

投稿日時 - 2011-02-17 04:41:47

補足

実はそういったアクセス用のメソッド自体は作成していたのですが、
外部のファイルや関数からForm1のメソッドを呼び出す方法が分からずにいました。
仮にForm1にvoid test()というメソッドがあったとした場合、
違うファイルからそのtest関数を呼び出すにはどのようにすれば良いのでしょうか。

というのも、Form1がどこで宣言されているのかもよく分からないのです。
main関数を見れば

int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}

などとなっていましたが、Form1はこのApplication::Runの中で一時的に
作成されているのみということなのでしょうか。

投稿日時 - 2011-02-17 06:11:31

あなたにオススメの質問