Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как изменить переменную объявленную в одной форме из другой формы? (winforms)

Eternally Against Искусственный Интеллект (239079), закрыт 2 года назад
Чего-то запутался...
Есть форма Combat, где происходит "битва" между игроком и компьютером. Битвы в пошаговом режиме, текущие очки действий игрока записаны в переменную int playerCurrAP объявленной в самой форме Combat.
В форме есть кнопка "Лечится", которая вызывает новую форму:
HealMenu heal = new HealMenu(player, ref playerCurrAP);
heal.ShowDialog();
В появившемся диалоговом окне игрок выбирает "аптечку" и нажимает "Лечится", после нажатия этой кнопки должно измениться значение playerCurrAP из формы Combat, но чего-то никак не пойму как это сделать.
Думал, что можно как-то через ref передать ссылку на эту переменную, но ведь ссылка передается в HealMenu и как её передать дальше к кнопке или методу, который вызывает кнопка - не понимаю.
Подскажете что можно придумать? Может иначе как-то..
Спасибо!

***

Ах, да... еще надо вывести лог в форме Combat если игрок подлечился, т. е. надо обратно в Combat передать... ну, например (int) число ("-1" - будет служить условием для того, что-бы не выводить лог если игрок отменил действие, а значение > 0 будет служить условием и значением для вывода лога).
Лучший ответ
Максим Искусственный Интеллект (196689) 3 года назад
Вообще, игровую модель неказисто держать на формах. В идеале модель лежит в отдельных классах и сообщает об изменениях формам. Но ты может обращаться к полю формы после закрытия диалогового окна.
Eternally AgainstИскусственный Интеллект (239079) 3 года назад
Спасибо, а что нужно знать, что-бы уметь "сообщать" формам об изменениях (что-бы форма знала когда обновить данные, когда вывести какую-то строку в лог, заблокировать\разблокировать элемент и тд.)?
Максим Искусственный Интеллект (196689) Eternally Against, подписываешься на события (Event).
Остальные ответы
Jurijus Zaksas Искусственный Интеллект (420168) 3 года назад
Просто не делай так.
Все действия должны происходить в некотором, условно говоря, игровом движке - глобально доступном статическом классе.
А если ты будешь перекидывать данные между формочками, то рано или поздно ты где-то что-то потеряешь, напутаешь, у тебя будут вылезать какие-то неактуалные данные и творитЬся (твое правописание возвратных глаголов - это отдельная тема) черт знает что.

В самом общем случае, для доступа к методу объекта любого класса должны быть соблюдены следующие требования:

1. Модификатор доступа метода должен быть public
2. В том месте, где происходит вызов метода, должна присутствовать (быть доступна) ссылка на экземпляр класса, сиречь объект.
Eternally AgainstИскусственный Интеллект (239079) 3 года назад
Да вот уже поздно догадался, что лучше-бы было отдельные классы делать для "всего такого". Но уже сделано так, что многое (почти все) происходит в самих формах и переделывать, боюсь, будет слишком долго. А может лучше и сразу переделать...
Похожие вопросы