如何使用c#访问另一个窗体中的对象?

时间:2010-12-07 04:18:39

标签: c#

我的窗口是Main.cs,而我的窗口是Options.cs。在我的Main.cs中,我已经定义了一个名为“Player”的类,我在那里实例化了它。

从我的选项表单中,我希望能够访问我在Main.cs表单中创建的Player对象的方法和属性。 Visual Studio 2010告诉我“名称”Player1“在当前上下文中不存在。

我认为这很奇怪,加重我的困惑的是我可以从Options.cs表单中“看到”我的Player类的静态方法。

提前谢谢!

编辑:

Inside Main.cs:

Player Player1 = new Player("Player 1", "X");
Player Player2 = new Player("Player 2", "O");

...

public class Player
{
    public static bool Turn { get; set; }
    public static int TotalGames { get; set; }

    public string Name { get; set; }
    public string Icon { get; set; }

    public static void ToggleTurn()
    {
        Turn = !Turn;
    }

    public Player(string name, string icon)
    {
        Name = name;
        Icon = icon;
    }

}

Inside Options.cs:

private void Options_Load(object sender, EventArgs e)
{
    SetCheckboxesToPlayerTurn();
    txtPlayer1Name.Text = Player1.Name; //HERE IS WHAT I WANT :(
}

3 个答案:

答案 0 :(得分:3)

public static bool Turn { get; set; }

表示此变量在类的所有实例之间是SHARED。所以你的转向逻辑不会起作用,因为他们共享这个变量。

  

Visual Studio 2010告诉我“这个名字   “Player1”中不存在   目前的背景。

因为你在main.cs中声明了那个变量,Options.cs也没有访问权限。您需要创建静态变量,然后访问它们。 IE

public static Player Player1;
public static Player Player2;
public static main(){
    Player1 = new Player("Player 1", "X");
    Player2 = new Player("Player 2", "O");
    ...
}

答案 1 :(得分:3)

您需要以某种方式从“选项”表单中获取对Player对象的引用。

更改此行:

Player Player1 = new Player("Player 1", "X");

public Player Player1 = new Player("Player 1", "X");

并将其移到构造函数之外(如果它就在那里)。 然后在Options中创建一个构造函数,它接受Main的一个实例,如下所示:

private Main main;
public Options(Main main)
{
  this.main=main;
}

现在,不要使用Main的默认构造函数创建Options,而是使用(仍在Main中):

Options o = new Options(this);

您现在应该可以使用以下方式从选项中引用您的玩家:

string name = this.main.Player1.Name

答案 2 :(得分:0)

使用存储库模式获取/创建玩家, 用于存储对playres的生活引用的身份地图模式  和服务定位器模式可能在单例实例中,用于全局访问您的身份映射器。

对于游戏全球静态很好我想但是......