You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何从另一个窗体访问同一个对象?

在另一个窗体中显示Player实例的字段值

下面提供几种简单直接的实现方式:

方法一:通过构造函数传递Player实例

给第二个窗体(比如命名为GameForm)添加接收Player参数的构造函数,打开窗体时直接传入实例:

  1. 修改第二个窗体的代码:
public partial class GameForm : Form
{
    public GameForm(Player player1, Player player2)
    {
        InitializeComponent();
        // 直接给标签赋值
        labelPlayer1Name.Text = player1.Name;
        labelPlayer1Symbol.Text = player1.Symbol;
        labelPlayer2Name.Text = player2.Name;
        labelPlayer2Symbol.Text = player2.Symbol;
    }
}
  1. 在FormStart中打开第二个窗体的代码:
// 创建Player实例后
Player player1 = new Player(textBoxPlayer1.Text, labelChar1.Text);
Player player2 = new Player(textBoxPlayer2.Text, labelChar2.Text);

// 打开第二个窗体并传入实例
GameForm gameForm = new GameForm(player1, player2);
gameForm.Show();

方法二:通过公共属性传递

如果需要在窗体创建完成后再设置Player实例,可以给第二个窗体添加公共属性:

  1. 第二个窗体代码:
public partial class GameForm : Form
{
    // 定义公共属性
    public Player Player1 { get; set; }
    public Player Player2 { get; set; }

    public GameForm()
    {
        InitializeComponent();
    }

    // 在窗体加载事件中给标签赋值
    private void GameForm_Load(object sender, EventArgs e)
    {
        if (Player1 != null)
        {
            labelPlayer1Name.Text = Player1.Name;
            labelPlayer1Symbol.Text = Player1.Symbol;
        }
        if (Player2 != null)
        {
            labelPlayer2Name.Text = Player2.Name;
            labelPlayer2Symbol.Text = Player2.Symbol;
        }
    }
}
  1. FormStart中的调用代码:
Player player1 = new Player(textBoxPlayer1.Text, labelChar1.Text);
Player player2 = new Player(textBoxPlayer2.Text, labelChar2.Text);

GameForm gameForm = new GameForm();
gameForm.Player1 = player1;
gameForm.Player2 = player2;
gameForm.Show();

方法三:通过静态类共享(适合全局场景)

如果多个窗体都需要访问这些Player实例,可以创建静态类来存储:

  1. 创建静态类:
public static class GameData
{
    public static Player Player1 { get; set; }
    public static Player Player2 { get; set; }
}
  1. FormStart中赋值:
GameData.Player1 = new Player(textBoxPlayer1.Text, labelChar1.Text);
GameData.Player2 = new Player(textBoxPlayer2.Text, labelChar2.Text);
  1. 第二个窗体中访问:
private void GameForm_Load(object sender, EventArgs e)
{
    labelPlayer1Name.Text = GameData.Player1.Name;
    labelPlayer1Symbol.Text = GameData.Player1.Symbol;
    labelPlayer2Name.Text = GameData.Player2.Name;
    labelPlayer2Symbol.Text = GameData.Player2.Symbol;
}

注意:静态类的方式适合小型场景,复杂项目中要注意线程安全和实例生命周期的问题。

内容的提问来源于stack exchange,提问作者zaraboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:24:14