[cpp/cli] tablica PictureBox'ow a eventy

0

Witam!
Jestem w trakcie tworzenia prostej aplikacji karcianej i mam pytanie dotyczace wstawiania event handlerow do tablicy picturebox'ow

metoda generowania reprezentacji rozdania (jako obrazkow) wyglada u mnie tak:

void Display_images(array<PictureBox^>^ PB, array<int>^ gracz, int positionX, int positionY)
		{
			Array::Sort(gracz);                                 //nieistotne w kontekscie problemu
			for(int i=0;i<gracz->Length;i++)
			{	
				this->Controls->Remove(PB[i]); 
				PB[i] = gcnew System::Windows::Forms::PictureBox();
				PB[i]->Location = System::Drawing::Point(positionX, positionY);
				PB[i]->Size = System::Drawing::Size(71, 96);
				PB[i]->Image = (cli::safe_cast<System::Drawing::Image^  >(this->imageList->Images[gracz[i]] ));
				this->Controls->Add(PB[i]);
				positionX -=15;
			}
		}

w miedzyczasie tworze w klasie tablice takich pictureboxow np.

array<PictureBox^>^ PBW;

i inicjalizuje konstruktorem

PBW = gcnew array<PictureBox^>(13);

Chcialbym teraz dorobic event handlery (a dokladnie mouseenter i mouseleave) dla kazdego obrazka(karty) w takiej reprezentacji 13kart (a dokladnie 52, u mnie jest 4 graczy:), ale to szczegol)

Watpie bym musial tworzyc funkcje dla kazdego elementu tablicy pictureboxow, to troche nieestetyczne, Czy ma ktos pomysl lub wskazowke jak to zrobic?
Pozdrawiam i dziekuje za reposty,
JK

0
  1. visual c++ != cpp/cli
  2. np. stworz jeden odpowiedni eventhandler i podepnij go np. do wszystkich 13stu onXXXX roznych kart
  • 'odpowiedni' - potrafiacy rozroznic ktora karte kliknieto i zareagowac odpowiednio. polecam w tym celu zwrocic uwage na standardowy argument EventHandler'a - 'object sender'

  • 'podepnij' - w zwykly, standardowy sposob (nie mam na mysli dwuklika w designerze). jesli nie wiesz jak, patrz tutoriale o Eventach albo podejrzyj jakie podpiecie designer wygenerowuje w pliku .h jak sobie eventhandler wyklikasz

0
quetzalcoatl napisał(a)

polecam w tym celu zwrocic uwage na standardowy argument EventHandler'a - 'object sender'

(Chyba) otworzyles mi oczy quetzalcoatl. Wielkie dzieki za wskazowki. Zrobilem to tak:
1)Funkcja inicjalizujaca handlery dla kazdego elementu w tablicy (13 kart) vide "odpowiedni" ;)

void ImagesEventHandler(array<PictureBox^>^ PB)
		{	
			for(int i=0;i<13;i++)
			{
				PB[i]->MouseEnter += gcnew System::EventHandler(this, &Form1::PB_ENTER);
				PB[i]->MouseLeave += gcnew System::EventHandler(this, &Form1::PB_LEAVE);
			}		
		}
  1. "Podpinam" te handlery dla tych elementow w tablicy pictureboxow
private: System::Void PB_ENTER(System::Object^  sender, System::EventArgs^  e)
		 {			
			 for(int i=0;i<13;i++)
			 {
				 if(sender==PBW[i])
					PBW[i]->Location = System::Drawing::Point(700-(i*15),290);
			 }

		 }
private: System::Void PB_LEAVE(System::Object^  sender, System::EventArgs^  e)
		 {
			 for(int i=0;i<13;i++)
			 {
				 if(sender==PBW[i])
					PBW[i]->Location = System::Drawing::Point(700-(i*15),300);
			 }
		 }

1 użytkowników online, w tym zalogowanych: 0, gości: 1