これは私が今していることです!!!
//picture box
pct->Click += gcnew EventHandler(this,&fornow::Form1::Display);
private: System::Void Display(System::Object^ sender, System::EventArgs^ e){
PictureBox^ pb = safe_cast<PictureBox^>(sender);
pictureBox1->Image = pb->Image;
}
どうやら、C++/Cli でデリゲートを使用できないようです。この種のコーディングは初めてです !! それで、クリックした後にイベントハンドラメソッドにさらにいくつかの引数を送信する方法を誰か教えてください。そうすれば、そこのコードでそれを使用できます!!!
System::String があるように、このように送信できれば、次のように書くことができます
private: System::Void Display(System::Object^ sender, System::EventArgs^ e, System::String^ s){
Mat img = imread(s);
imshow("",img);
waitKey(0);
}
/clr でコンパイルし、試用版と 2010 Visual C++ を使用しています。
このコードは、buttonclick イベント ハンドラーに存在します... コードのその部分を追加しました ...
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
// array<System::String^>^ files =
// System::IO::Directory::GetFiles(textBox1->Text,"*.*",
// System::IO::SearchOption::AllDirectories);
pin_ptr<const wchar_t> wch = PtrToStringChars(textBox1->Text);
wchar_t wch1[260];
wcscpy(wch1,wch);
list<basic_string<wchar_t>> dir;
list<string> s;
retrieve *r = new retrieve();
dir = r->print(wch1,dir);
for(list<basic_string<wchar_t>>::iterator itr = dir.begin(); itr != dir.end();itr++)
{
cout<<std::string(itr->begin(),itr->end())<<endl;
s.push_back(std::string(itr->begin(),itr->end()));
}
filter *f = new filter();
s=f->filter1(s); // fills s with paths (strings)
flowLayoutPanel1->Controls->Clear();
for(list<string>::iterator i=s.begin();i!=s.end();i++)
{
std::string sn = std::string(i->begin(),i->end());
System::String^ s = gcnew System::String(sn.c_str());
PictureBox^ pct = gcnew PictureBox();
if(checkBox1->Checked==true)
pct->Image = Image::FromFile(s)->GetThumbnailImage(50,50,nullptr,System::IntPtr::Zero);
if(checkBox1->Checked==false)
pct->Image = Image::FromFile(s);
pct->Size = System::Drawing::Size(100,100);
flowLayoutPanel1->Controls->Add(pct);
pct->Click += gcnew EventHandler(this,&fornow::Form1::Display);
Mat img = imread(sn);
imshow(sn,img);
waitKey(0);
}
申し訳ありませんが、この種のコーディングは本当に初めてです..どんな提案も役に立ちますありがとう!!!