这是我第一次发帖,所以请告诉我,我做错了什么!
我制作了一个WPF表单,这是一个基于RPG文本的小游戏。
我有一个按钮,打开一个新的表格,应该是一个商店。
我使用var ShopWindow = new Shop(); ShopWindow.ShowDialog();
打开子表单。
我的问题是,如何在主窗体上编辑变量? 假设我购买了10个单位的东西,然后我想从主表单中提取10个单位,然后添加一个项目。
我希望我已经提供了足够的信息,如果您需要什么,请告诉我!
答案 0 :(得分:0)
有很多方法可以做到这一点,但一个简单的方法可以说:
如果Shop表单上有输入textBox1,则必须将Modifiers属性(在属性工具箱中)从Private更改为Public,这样您就可以从主表单访问它了,您将可以执行一些操作像这样:
var ShopWindow = new Shop();
ShopWindow.ShowDialog();
var s = ShopWindow.textBox1.Text;
答案 1 :(得分:0)
您可以通过多种方式执行此操作,但我建议您在Shop表单中创建自定义Action事件。
假设您创建了一个表示项目的类。将此代码放在Shop表单中:
public event Action<Item, int> ItemBought = delegate { };
因此,现在当用户购买商品时,您需要将其称为:
ItemBought(item, 30);
“item”是玩家购买的商品,30是购买的单位数量。
现在,在主窗口中,您需要使用以下代码打开Shop窗口:
Shop s = new Shop();
s.ItemBought += Item_Bought;
s.Show();
并添加此方法,当玩家购买商品时,商店表单将在主窗口中加注:
internal void Item_Bought(Item item, int cost)
{
// Update the main window here.
}
答案 2 :(得分:0)
最简单的方法之一是拥有一个代表用户项目的类,让我们称之为Inventory
。在此课程中,您可以放置所有相关属性,例如decimal money
,ObservableCollection<Item> Items
等。然后,您只需将其实例从主Window
传递给子Window
。 1}}通过构造函数:
var ShopWindow = new Shop(inventory);
ShopWindow.ShowDialog();
由于inventory
是一个对象,因此您将从主Inventory
传递对Window
对象的引用,因此您在子Window
中对其进行了任何更改}也将反映在主Window
对象中。