从我的子表单中编辑主表单中的变量

时间:2014-01-22 18:08:20

标签: c# wpf forms

这是我第一次发帖,所以请告诉我,我做错了什么!

我制作了一个WPF表单,这是一个基于RPG文本的小游戏。 我有一个按钮,打开一个新的表格,应该是一个商店。 我使用var ShopWindow = new Shop(); ShopWindow.ShowDialog();打开子表单。

我的问题是,如何在主窗体上编辑变量? 假设我购买了10个单位的东西,然后我想从主表单中提取10个单位,然后添加一个项目。

我希望我已经提供了足够的信息,如果您需要什么,请告诉我!

3 个答案:

答案 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 moneyObservableCollection<Item> Items等。然后,您只需将其实例从主Window传递给子Window。 1}}通过构造函数:

var ShopWindow = new Shop(inventory);
ShopWindow.ShowDialog(); 

由于inventory是一个对象,因此您将从主Inventory传递对Window对象的引用,因此您在子Window中对其进行了任何更改}也将反映在主Window对象中。