![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| stron |
|
||||
![]() Консультант ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1654 Регистрация: 17.7.2003 Где: Питер Репутация: 4 Всего: 36 |
Я сейчас пишу карточную игру для 4-х игроков.(C#)
Соответственно, у меня есть 52 карты. Карты показываю в PictureBox'ах. У каждой карты есть свой весовой идентификатор.(раздаю их в другой части проги) Для хранения таковой инфы создаю структуру:
Создаю массив из 52 элементов типа pb в программе. В игре приходится обрабатывать клики по картам, соответственно при инициализации PictureBox'ов "приклеиваю" обработчик:
Вопрос: Почему при клике на любую из карт в качестве weight выдаётся 0(его там не должно быть в принципе)? А может кто подскажет ещё способ, как можно различать карты. ЗЫ: Были у меня мысли как-нибудь перегрузить обработчик, но как это сделать я не придумал. Это сообщение отредактировал(а) stron - 5.5.2004, 00:37 -------------------- подписи нет |
||||
|
|||||
| Kurt |
|
||||||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Ну.. Какие тут могут быть соображения..
Т.к. я не вижу полного кода, все мои "изыскания" ( Сначала по вопросу почему у тебя не работает правильно.. "Разрешите задать Вам несколько вопросов?" 1) Твои структуры ты должне был каким-то образом добавлять на форму. Для этого используем Controls.Add() (если я ошибаюсь - сразу сорри..). Так? Посморим, на объявление этой ф-ции:
Вот! В качестве параметра она принимает либо класс Control, либо его наследник. Твои структуры не являются контролами, поэтому рискну предположить, что ты добавлял только pb[i].img:
Если так, то обрати внимание - причем здесь остальные поля структуры? как тока ты добавил на форму - ты уже не связан с остальными полями.. Однако, я могу ошибаться - я не знаю, как оно в действительности реализовано.. 2)Т.к. ты используешь СТРУКТУРУ, к-я является ТИПОМ, то она везде передается ПО ЗНАЧЕНИЮ (за исключением автоматической распаковки..) - меняй/не меняй ее в ф-ции - это не окажет влияния.. Проверь, если не первая ошибка, то, можь, такое где есть.. Теперь так. Как я тебе предлагаю все эт дело реализовать.. Предлагаю написать свой КЛАСС-НАСЛЕДНИК от PictureBox! Добавь ему св-ва, к-е тебе нужны! Вобщем, я накрапал тебе маленький примерчик (можно компилить и запускать.. На форме 2 PictureBox'a, вернее их наследники.. Я все оформил массивом, поэтому без разницы - что 2, что 102 контрола. Тока возьми сначала картинку поменьше.. Здесь у первой картинки Weight=0, у 2-й - weight=1. Итого:
Все. Похоже?.. Надеюсь, хоть чем-то помог. З.Ы. Если я прав - с тебя игра! -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||
|
|||||||
| stron |
|
||||
![]() Консультант ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1654 Регистрация: 17.7.2003 Где: Питер Репутация: 4 Всего: 36 |
Ошибку понял.
Честно говоря, я не знаю, что такое автоматическая распаковка. Буду писать класс-наследник. Спасибо, что помог! -------------------- подписи нет |
||||
|
|||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Да не за что..
Приходите еще.. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| Kurt |
|
||||||||||||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Да, чуть не забыл..
УПАКОВКА (boxing) - процесс, при котором происходит явное преобразование структурного типа в ссылочный. Что при этом происходит: в управляемой куче (по-моему, так это называется.. Как все это происходит? Очень просто. Допустим, у нас есть переменная типа int:
Упаковываем (достаем из стека, создаем объект в куче и получаем ссылку на него):
Прошу заметить, "object" тут пишется с маленькой буквы. Существует противоположная ей операция, кя называется РАСПАКОВКА (unboxing) - преобразование ссылки на объект из управляемой кучи в структурный тип. Следует отметить, что .NET Framework автоматически производит проверку на совместимость между типом объекта из кучи и структурным типом, в к-й мы хотим произвести распаковку. Вот как производится распаковка:
Если Framework обнаружит несовместимость типов, то выдается исключение InvalidCastException:
Все. Да, возникает законный вопрос - а вообще зачем этим стоит интересоваться? Ну.. Тут несколько аспектов. Во-первых, чтоб избежать, на мой взгляд, трудно обнаружимых ошибок, и во вторых, операции с переменными в стеке выполняются несколько быстрее, поэтому это стоит учитывать при оптимизации приложения. С другой стороны, увлекаться этим тоже не стоит - все-таки процесс распаковки занимает некоторое время, и кроме того, в современных ООП-программах тяжело обойтись без объектов. В конце хочу заметить, что в ряде случаев, процессы упаковки/распаковки производятся автоматически, без нашего участия. Например:
В принципе, все. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||||||||
|
|||||||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |