簡體   English   中英

如何使用c#訪問另一個Windows窗體中的對象?

[英]How do I access an object in another windows form using c#?

我有Windows窗體Main.cs和Windows窗體Options.cs。 在Main.cs中,我定義了一個名為“ Player”的類,並在其中實例化了該類。

從“選項”表單中,我希望能夠訪問在Main.cs表單中創建的Player對象的方法和屬性。 Visual Studio 2010告訴我“名稱”“ Player1”在當前上下文中不存在。

我認為很奇怪,而且讓我感到困惑的是,我可以從Options.cs表單中為“播放器”類“查看”靜態方法。

先感謝您!

編輯:

在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;
    }

}

在Options.cs內部:

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

意味着在類的所有實例之間共享此變量。 因此,您的轉彎邏輯將不起作用,因為它們共享此變量。

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");
    ...
}

您需要以某種方式從“選項”表單中獲得對您的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

使用存儲庫模式來獲取/創建玩家,使用身份映射圖模式來存儲對播放器的實時引用,以及使用服務定位器模式,可能在單例中以全局方式訪問您的身份映射器。

對於游戲來說,全球靜態很好,但我認為...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM