| 
							msdubov
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 «  : 03-02-2007 18:13 »   | 
								
								 | 
							  
							 
							Я пишу одну игрушку на C#, так вот, там я создаю поле (8x8) из PictureBox'ов. Затем я присваиваю каждой картинке один и тот же обработчик: PictureBox[,] pb1 = new PictureBox[8, 8];
  for (int i = 0; i < 8; i++) {         for (int j = 0; j < 8; j++)         {                     pb1[i, j] = new PictureBox();
                      ...
                      pb1[i, j].Click += ImgClick;         } }
  void ImgClick(object obj, EventArgs args) { PictureBox pb = obj as PictureBox;
  ????  } А дальше мне необходимо узнать, каким по счету в массиве pb1 является pb2, возможно ли это? И если нет, как поступать?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 13-12-2007 18:37 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 03-02-2007 19:24 »   | 
								
								 | 
							  
							 
							Пробегись по массиву и сравни pb, который ты получил в функции с каждым объектом массива. Это пока единственное, что приходит в голову.  Если подумать, то может еще что-то наскребется   , глядишь, еще идеи кто-то подаст   .  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 04-02-2007 06:49 »   | 
								
								 | 
							  
							 
							необходимо узнать, каким по счету в массиве pb1 является pb2
   - не совсем понятна задача... где тут pb2 ? а если нужно определить номер элемента массива , то проще по адресам A arr[xmax,ymax];// 
  A elem=arr[?,?]; // имеется некий элемент
  if(&elem > arr) {    int N_zb = &elem-arr; // порядковый номер в массиве    int xelem_zb = N_zb%ymax;    int yelem_zb = N_zb/ymax;
     //также тут надо проверить на максимальные индексы    if(xelem_zb<xmax && yelem_zb<ymax)    {       //xelem_zb,yelem_zb - искомые индексы    }    else    {       //элемент не в массиве    }
  } else {    //элемент не в массиве }
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							msdubov
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 04-02-2007 15:57 »   | 
								
								 | 
							  
							 
							Мне нужно знать в ImgClick i и j того элемента, который его вызвал, потому что у меня есть параллельный массив других объектов (Field именуется) и в обработчике мне необходимо обратиться к элементу этого массива с теми же i и j. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 04-02-2007 17:12 »   | 
								
								 | 
							  
							 
							а чем мой код не устраивает?   в принципе так можно определить не только индекс, но и даже массив, из которого элемент взят кстати. Если эти два массива у тебя одинакового размера, то даже индекс высчитывать не надо: A arr1[xmax,ymax]; B arr2[xmax,ymax]; ... A elem=arr1[?,?]; // имеется некий элемент ... {    B* pElem_B=0;    int N_zb = &elem-arr1; // порядковый номер в массиве 1    pElem_B=(arr2+N_zb);    pElem_B->... ; //pElem_B - указатель на искомый элемент во 2 массиве
  но адреса проверять на границы всё равно надо )  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 04-02-2007 17:19 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 04-02-2007 20:23 »   | 
								
								 | 
							  
							 
							Алексей1153++, это форум по .NET, а не по C++. Судя по коду, речь идёт о C#. Никакой арифметики с указателями.    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 04-02-2007 20:29 »   | 
								
								 | 
							  
							 
							dimka, там нету что ли?  *озадачен*
  тогда остаётся одно - хранить индексы в самом элементе... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 04-02-2007 20:31 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 04-02-2007 21:06 »   | 
								
								 | 
							  
							 
							Алексей1153++, В шарпе указатели боком ходют. Напрямую с ними не играются. Привыкай. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 05-02-2007 16:05 »   | 
								
								 | 
							  
							 
							Finch, не притронусь никогда к вашему шарпу )) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 05-02-2007 16:19 »   | 
								
								 | 
							  
							 
							Да фиг с ним, что он показал на С++. СМысл-то один- сравнить адреса объектов. Пускай юзает Equal. Т.е. если obj.Equal(obj1)==true, то объекты указывает на одну область памяти, иначе нет. Один объект он получит в качестве перфого параметра функции обработчика собтия. Пусть его и сравнит со всеми объектами массива.  В чем проблема-то??? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 05-02-2007 16:57 »   | 
								
								 | 
							  
							 
							nikedeforest, скорость буде ниже несравнимо ) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 05-02-2007 17:03 »   | 
								
								 | 
							  
							 
							На каком Пентиуме ты это заметишь? Может на асм вообще перейдешь тогда?    А хрен ли мелочится, у нас в терминальном комплексе на кафедре плакатик висит - сидит программист за компьютером, ав на клавиатуре только две клавиши. И надпись на плакате real  code - binary code.  з.ы. Пояснять какие клавиши на клавиатуре не надо я думаю.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 05-02-2007 17:06 от nikedeforest »
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 05-02-2007 17:07 »   | 
								
								 | 
							  
							 
							nikedeforest, а если массив будет 10000000*10000000 ? )
  к игре , где 8*8 - там фигня конечно. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 05-02-2007 17:11 »   | 
								
								 | 
							  
							 
							Если такой массив будет, то стоит задуматься о внедрении БД в программу    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 05-02-2007 17:14 »   | 
								
								 | 
							  
							 
							nikedeforest, не в этом сссссуть, а что уходили от бейсика, а пришли туда же... Я уже не могу без указателей 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 05-02-2007 17:18 »   | 
								
								 | 
							  
							 
							А что ты именно не можешь без них? Я помню единственный момент, когда  мне помогли указатели, это когда я работал с криптографией. А где еще ты не можешь без них обойтись? И то, там (в том случае) можно обойтись без них, использованием побитовых операторов.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 05-02-2007 17:23 от nikedeforest »
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 05-02-2007 17:23 »   | 
								
								 | 
							  
							 
							nikedeforest, я постоянно использую - при работе с массивами, сортировке, передачи в параметры больших структур. На скорости отражается очень хорошо, я во многих случаях специально проверял , поэтому и оптимизировал 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 05-02-2007 17:25 »   | 
								
								 | 
							  
							 
							ПРи передаче параметров, если тип структурный, то в .НЕТ передается тоже адрес на область, а не   побитовая копия объекта. Что-то еще? з.ы. Кстати, какие выйгрыши были-то? А то может ты выйграл пару миллисекунд и радовался, что твоя программа работает чуть быстрее при общей работате в 10 минут    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 05-02-2007 17:29 от nikedeforest »
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 05-02-2007 17:38 »   | 
								
								 | 
							  
							 
							nikedeforest, ты меня совсем за идиота принимаешь? ) Сортировка при помощи указателей, когда элементы - по килобайту , тут разница большая идёт, на минуты
  конечно от мощности машины зависит, не спорю
  а кроме того, указатели - это красиво ) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 05-02-2007 17:51 »   | 
								
								 | 
							  
							 
							а кроме того, указатели - это красиво )
  По-моему это просто понты   . Вот смотри, ты говоришь о том, что элементы по пару килобайт. По сути на .НЕТ ты для него создал бы свой пользовательский. А вот теперь смотри. Ты создал объект этого пользовательского типа и инциализировал его. А вот теперь если ты сделаешь так UserType obj1=obj. То ты получишь практически тот же указатель на объект потому как obj1 будет указывать на тот же адрес. Понимаешь теперь? Это будет не копия, это будет тот же obj. Вот и все. Просто придется применить другую логику. Хотя ексли нравится возится с байтами напрямую, то что ж ты не пишешь на асме все же?    Ох там как скорость возрастет   )  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							msdubov
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 05-02-2007 18:02 »   | 
								
								 | 
							  
							 
							Я пошел другим путем - написал PicBoxAdv, наследующий PictureBox, и добавил 2 свойства - x и y. Перед тем как присвоить обработчик событий, я в цикле для каждого элемента массива указываю x=i и y=j. ImgClick теперь знает x и y. Все работает! 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 05-02-2007 18:09 »   | 
								
								 | 
							  
							 
							Вот оно преимущество ООП   . Вот тебе Алексей и скорость. msdubov, как я понимаю у тебя по сути получился пользовательский контрол, который наследован от PictureBox?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #22 : 05-02-2007 18:30 »   | 
								
								 | 
							  
							 
							nikedeforest, да я не буду с тобой спорить )  Кому что нравится... Offtopic: а ты уже бросил курить?   Поставлю в угол.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 05-02-2007 18:38 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							nikedeforest
							
						 | 
						
							
								  | 
								
									
									 « Ответ #23 : 05-02-2007 18:42 »   | 
								
								 | 
							  
							 
							Offtopic:  А я собирался бросать курить? НЕ бросил, не так уж много я и курю.
 
 А по поводу спора. В споре рождается истина. Мы с тобой сравниваем две технологии. По-моему вполне познавательно. Мы вроде не распаляемся, я не бью в грудь кулаком. Все чинно, благородно, жаль без пива.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 05-02-2007 18:43 от nikedeforest »
								 | 
								
									 
									Записан
								 | 
							  
							 
							ещё один вопрос ... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #24 : 05-02-2007 20:42 »   | 
								
								 | 
							  
							 
							Т.е. если obj.Equal(obj1)==true, то объекты указывает на одну область памяти, иначе нет. Что-то мне казалось, что метод Equal как раз организует сравнение по содержанию, а не по адресу. Для сравнения указателей достаточно obj == obj1. Но не уверен - проверю на досуге. А вот теперь если ты сделаешь так UserType obj1=obj. То ты получишь практически тот же указатель на объект потому как obj1 будет указывать на тот же адрес. Понимаешь теперь? Это будет не копия, это будет тот же obj. Вот и все. Просто придется применить другую логику. Сиплюсплюснику лучше так показывать UserType &obj1 = obj; Понятнее будет основная идея работы с переменными   . Я пошел другим путем - написал PicBoxAdv, наследующий PictureBox, и добавил 2 свойства - x и y. Перед тем как присвоить обработчик событий, я в цикле для каждого элемента массива указываю x=i и y=j. ImgClick теперь знает x и y. Наш человек!    Я это сразу хотел предложить, только подумал, что для малого по размеру поля это не будет лучшим решением. Расход памяти vs расход времени - выбор безразличен, а решение уже было предложено.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 05-02-2007 20:44 от dimka »
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							msdubov
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									«  Ответ #25 : 06-02-2007 16:06 »    | 
								
								 | 
							  
							 
							dimkaЗато Алексей1153++ предложил:  тогда остаётся одно - хранить индексы в самом элементе...
  Спасибо. nikedeforestДа, просто новый, наследующий PictureBox контрол с 2-мя новыми свойствами.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |