| 
			| 
					
						| 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-мя новыми свойствами. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |