在表单之间传输数据

时间:2010-08-22 12:26:57

标签: c#

我有两种形式。在第一个,我有一个文本框和一个按钮,在另一个我有一个标签。当您在文本框中输入文本,然后按下按钮时,将打开一个新表单,并且该标签与上一个表单中的文本框具有相同的文本。如何使用get / set执行此操作? 我创建了一个“Globals”类,并在其中获取/设置:

class Globals
{
    public string imena = "";
    public string ime
    {
        get
        {
            return imena;
        }
        set
        {
            imena = value;
        }
    }
}

并以第一种形式

private void btnplay_Click(object sender, EventArgs e)
{
    //this.Hide();
    Game igra = new Game();
    igra.Show();

    Globals promenljive = new Globals();
    promenljive.ime = tbpl1.Text;
}

并在第二个

private void Game_Load(object sender, EventArgs e)
{
    Globals promenljive = new Globals();
    lblime1.Text = promenljive.ime;
}

但它不起作用?我做错了什么?? 谢谢

3 个答案:

答案 0 :(得分:3)

你正在创建两个单独的Globals实例,首先......那些将具有自变量,这就是为什么你没有看到你刚设置的值。这就像把一栋房子涂成红色,然后看着一个完全不同的房子的颜色。

然而,使用像这样的“全局”类是一个坏主意。为什么不直接向Game构造函数添加参数,并以这种方式传递数据?

Game igra = new Game(tbpl1.Text);
igra.Show();

听起来你可能是初学者的新手。如果是这种情况,我强烈建议您在开始编写GUI应用程序之前,了解一般中C#,.NET和OO的基础知识。 GUI有其自身的困难(例如线程规则),即使您对基础知识充满信心,也很难开发。目前,您会发现很难区分真正的GUI特定问题,而只是不了解C#和.NET如何工作。

答案 1 :(得分:1)

没有。它不起作用,因为你有两个不同的Globals实例(变量)。每个都有不同的价值观。

您需要在两种表单之间使用一个共享的Globals变量。

示例:

在Form1中创建全局变量,然后在实例化游戏时,在构造函数中传递全局引用:

Globals promenljive = new Globals();
promenljive.ime = tbpl1.Text;
Game igra = new Game(promenljive);
igra.Show();

然后,将引用存储在Game的构造函数中:

public Game(Globals g) {
    this.promenljive = g; // you need a global member in Game called promenljive
}

希望它有所帮助。

答案 2 :(得分:0)

你不能在Game_Load中创建一个新的Globals,你必须将一个Globals对象的引用传递给Game的构造函数。