С#:как обращаться к массиву обьектов
От: ExtraLamer  
Дата: 05.03.03 20:55
Оценка:
Вопрос по С#!
Скажите как обращаться к конкретным обьектам в созданном массиве обектов?
Ну например, создал я 9 PictureBox'в (PB = new PictureBox[9].
Далее обрабатываю событие методом private void PB_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){}
А вот как в этом методе в каком PictureBox'е произошло событие не понятно, то ли в PB[3], то ли в PB[5] — не понятно .
Как сделать так чтобы метод понимал с каким именно PB он имеет дело?
Re: С#:как обращаться к массиву обьектов
От: Andy77 Ниоткуда  
Дата: 05.03.03 21:05
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

...
EL>Как сделать так чтобы метод понимал с каким именно PB он имеет дело?

PB_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){}
Re[2]: С#:как обращаться к массиву обьектов
От: ExtraLamer  
Дата: 05.03.03 21:16
Оценка:
Здравствуйте, Andy77, Вы писали:

A>...

EL>>Как сделать так чтобы метод понимал с каким именно PB он имеет дело?

A>PB_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){}


И что делать с этим sender'ом ?
Re[3]: С#:как обращаться к массиву обьектов
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.03.03 21:42
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>И что делать с этим sender'ом ?


Приводить к нужному типу и пользоваться.
... << RSDN@Home 1.0 beta 4 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: С#:как обращаться к массиву обьектов
От: ExtraLamer  
Дата: 05.03.03 22:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ExtraLamer, Вы писали:


EL>>И что делать с этим sender'ом ?


VD>Приводить к нужному типу и пользоваться.


Ну я привёл к String, C# говорит что это PictureBox и что Size Normal ... А мне нужно его Index в массиве! Как его получить в Sendere?

НУ кто нить напишите эту строчку кода!!! Чтоб было понятно!
Re[5]: С#:как обращаться к массиву обьектов
От: Oleg_Gashev
Дата: 05.03.03 22:05
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>Ну я привёл к String, C# говорит что это PictureBox и что Size Normal ... А мне нужно его Index в массиве! Как его получить в Sendere?


EL>НУ кто нить напишите эту строчку кода!!! Чтоб было понятно!


Console.WriteLine(((PictureBox)sender).Name);
Либо я найду путь, либо проложу его. © Свифт
Re[6]: С#:как обращаться к массиву обьектов
От: ExtraLamer  
Дата: 05.03.03 22:17
Оценка:
Здравствуйте, Oleg_Gashev, Вы писали:

OG>Console.WriteLine(((PictureBox)sender).Name);


но у меня масив PictureBox'в, это не работает.

Это тоже не работает => this.Text = Convert.ToString(((PB)sender).GetEnumerator); говорит что 'Form1.PB' denotes a 'field' where a 'class' was expected
Re[5]: С#:как обращаться к массиву обьектов
От: Andy77 Ниоткуда  
Дата: 05.03.03 22:19
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>Ну я привёл к String, C# говорит что это PictureBox и что Size Normal ... А мне нужно его Index в массиве! Как его получить в Sendere?


EL>НУ кто нить напишите эту строчку кода!!! Чтоб было понятно!


   int idx;
   for (idx = 0; idx < PB.Length; idx++) 
      if (PB[i] == sender) break;
Re[6]: С#:как обращаться к массиву обьектов
От: ExtraLamer  
Дата: 05.03.03 22:29
Оценка:
Здравствуйте, Andy77, Вы писали:

A>Здравствуйте, ExtraLamer, Вы писали:


EL>>Ну я привёл к String, C# говорит что это PictureBox и что Size Normal ... А мне нужно его Index в массиве! Как его получить в Sendere?


EL>>НУ кто нить напишите эту строчку кода!!! Чтоб было понятно!


A>
A>   int idx;
A>   for (idx = 0; idx < PB.Length; idx++) 
A>      if (PB[i] == sender) break;
A>


Большое СПАСИБООО!!!!
Правда в обработке события мыши гораздо лучше наверно. а то 1000 PictureBox'в запарно будет переберать.

int X;
if (PB[X] == sender) {}


Не знал что sender автоматтически приводится к int. Спасибо!
Re[5]: С#:как обращаться к массиву обьектов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.03.03 22:34
Оценка: 3 (1)
Здравствуйте, ExtraLamer, Вы писали:

EL>Ну я привёл к String, C# говорит что это PictureBox и что Size Normal ... А мне нужно его Index в массиве! Как его получить в Sendere?


EL>НУ кто нить напишите эту строчку кода!!! Чтоб было понятно!


int idx = Array.IndexOf(PB, sender);
... << RSDN@Home 1.0 beta 6 (np: Unknown — Track 12) >>
AVK Blog
Re[7]: С#:как обращаться к массиву обьектов
От: Oleg_Gashev
Дата: 05.03.03 22:35
Оценка:
Здравствуйте, ExtraLamer.

При создании в массиве PictureBox, я добавил в Tag индекс массива.

На click прописал:


MessageBox.Show(((PictureBox)sender).Tag.ToString());


И перебирать массив нет необходимости.
Либо я найду путь, либо проложу его. © Свифт
Re[7]: С#:как обращаться к массиву обьектов
От: Andy77 Ниоткуда  
Дата: 05.03.03 22:37
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>Большое СПАСИБООО!!!!

EL>Правда в обработке события мыши гораздо лучше наверно. а то 1000 PictureBox'в запарно будет переберать.

Тебе и не нужно ничего перебирать, sender — это и есть экземпляр PictureBox — именно того, который послал событие. Для того, чтобы обращаться с ним по всей строгости военного времени :), просто приведи его к нужному тебе типу —
PictureBox pb = (PictureBox)sender;


EL>Не знал что sender автоматтически приводится к int. Спасибо!

Ох... всё не так... лучше прочитай вначале основы
ms-help://MS.VSCC/MS.MSDNVS/vbcon/html/vbconEventHandling.htm
Re[6]: С#:как обращаться к массиву обьектов
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.03.03 22:54
Оценка:
Здравствуйте, Andy77, Вы писали:

A>
A>   int idx;
A>   for (idx = 0; idx < PB.Length; idx++) 
A>      if (PB[i] == sender) break;
A>


Вообще-то у массивов поиск есть (indexOf). А если подумать, то в таких случаях вместо массива нужно использовать HashTable или хотя бы отсортировать массив и искать бинарисерчем.
... << RSDN@Home 1.0 beta 4 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: С#:как обращаться к массиву обьектов
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.03.03 22:54
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

OG>>Console.WriteLine(((PictureBox)sender).Name);


EL>но у меня масив PictureBox'в, это не работает.


EL>Это тоже не работает => this.Text = Convert.ToString(((PB)sender).GetEnumerator); говорит что 'Form1.PB' denotes a 'field' where a 'class' was expected


Где у тебя этот массив?

sender это что ли массив? Ну тогда приводи его к массиву. Ту уж обясни полностю что у тебя и как...
... << RSDN@Home 1.0 beta 4 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: С#:как обращаться к массиву обьектов
От: Andy77 Ниоткуда  
Дата: 05.03.03 23:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вообще-то у массивов поиск есть (indexOf). А если подумать, то в таких случаях вместо массива нужно использовать HashTable или хотя бы отсортировать массив и искать бинарисерчем.


Зато наглядно... иначе пришлось бы объяснять про массив, который на самом деле является объектом :) ... пассаж про методы поиска, думаю, тут тоже не особо уместен — искать бинарисерчем в new PictureBox[9]??? :))) а если думать дальше, то нефиг 1000 PictureBox'ов ставить... да и все мы умрём когда-то, какая разница кто как пишет :)
Re[8]: С#:как обращаться к массиву обьектов
От: ExtraLamer  
Дата: 06.03.03 10:56
Оценка:
A>Ох... всё не так... лучше прочитай вначале основы
A>ms-help://MS.VSCC/MS.MSDNVS/vbcon/html/vbconEventHandling.htm

Да ... недавно дочитал основы в книжке от издательства Питер С#: уч.курс. чё то я стормозил, назвав sender — переменной.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.