• 締切済み

visual C++ の外部クラスからのコントロールの操作方法

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

みんなの回答

回答No.1

 こんばんは。  要は、PictureBox^はForm1内で動的に作成された代物で、メンバ変数として記憶されていないが、其れをクラスAの方から操作したいと言う事でしょうか。  手法の良し悪しは別として、可能である筈です。  但し、クラスAに向かってForm1のポインタ位は渡さないといけません。Form1からControlsプロパティを使えば、ピクチャーボックスに辿り着ける筈です。  http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.controls.aspx  http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.controlcollection_members.aspx //-------------------------  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();