アプリ版:「スタンプのみでお礼する」機能のリリースについて

VC++2005のWindowsフォームアプリケーションに関して教えていただきたいことがあります。

フォームに設置したボタンをクリックすると、自分で作ったクラス(仮にAとします)の関数が起動して、フォームのpictureBox1に描画ができるようにしたいです
Graphics^ gr = pictureBox1-> と書いた後に候補(CreateGraphics)が選択できませでした・・・
pictureBox1 というのは、Form1のメンバではなく、PictureBox^ pictureBox1 というように生成されているので、
やはり外部のクラスからフォームのコントロールを操作するのは厳しいのでしょうか・

A 回答 (1件)

 こんばんは。


 要は、PictureBox^はForm1内で動的に作成された代物で、メンバ変数として記憶されていないが、其れをクラスAの方から操作したいと言う事でしょうか。
 手法の良し悪しは別として、可能である筈です。
 但し、クラスAに向かってForm1のポインタ位は渡さないといけません。Form1からControlsプロパティを使えば、ピクチャーボックスに辿り着ける筈です。

 http://msdn.microsoft.com/ja-jp/library/system.w …
 http://msdn.microsoft.com/ja-jp/library/system.w …

//-------------------------
 Form1の何処か
//-------------------------

//ピクチャーボックスを作成する
System::Windows::Forms::PictureBox^ pictureBox = gcnew System::Windows::Forms::PictureBox();

//ピクチャーボックスをForm1に追加する
this->Controls->Add(pictureBox);

//背景色の設定
pictureBox->BackColor = System::Drawing::SystemColors::GradientActiveCaption;

//この文字列を使ってControlsプロパティから探す
pictureBox->Name = L"picture box dynamic created";

//位置やサイズの設定
pictureBox->Location = System::Drawing::Point(800, 20);
pictureBox->Size = System::Drawing::Size(100, 20);
pictureBox->Show();

//-------------------------
 クラスAの何処か
 fはクラスA内のメンバ変数で、Form1が入っているものとする
//-------------------------

//Form1のControlsプロパティからピクチャーボックスを見つける
const int iFound = f->Controls->IndexOfKey(L"picture box dynamic created");

//-1は見つからなかったので引き返す
if(iFound == -1)return;

//見つかった(必要に応じてPictureBox^にダウンキャストする)
System::Windows::Forms::Control^ control = f->Controls->default[iFound];

//グラフィックスオブジェクトの作成
System::Drawing::Graphics^ gfx = control->CreateGraphics();
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!