将变量的值传递给不同的形式

时间:2015-02-21 12:47:48

标签: c#

大家好我在第一种表格中有3个表格:

public int number1;

然后我的函数将值设置为number1,当我从控制台检查number1的值时,它是函数给它的值。

比我打开第二个表单并使用第二个表单我转到第3个表单,这里我想显示number1的值,这里是我在form3中使用的代码:

private void haberlesme_Load(object sender, EventArgs e)
    {

        Form1 frm1 = new Form1();
        label1.text = frm1.number1.tostring();

    }

我在form1中将函数设置为number1的函数是:

public int setNumber1(string num){    
retrun convert.int32(num);
}

按钮内的代码为:

number1 = setNumber1(txtValue.text);
messagebox.show("Number1 is : " + number1.toString());
// Here is the other code to open form2..

在消息框上显示number1,其中包含文本框中指定的值 但是,当我点击打开form3(haberlesme)在haberlesme_load部分的代码是:上面

显示0;我在这里错过了什么?

1 个答案:

答案 0 :(得分:2)

int的默认值为0。所以当你创建一个新对象时:

Form1 frm1 = new Form1();

直到某些内容发生变化,这将是0。你有几个选择,而且从上下文来看并不完全清楚哪种是你最好的设计。

您可以将变量设置为静态,以便域中只有一个变量,而不是每个表单实例一个变量。像这样:

public static int number1;

然后其他表单可以访问类中的值而不是实例:

label1.txt = Form1.number1;

如果它真的应该是一个实例变量,那么你需要一个实际实例的引用,它保存你想要的值。创建新实例不会这样做。

(作为一个类比......想象一下,你的朋友有一辆车,他在手套箱里有东西给你。如果你出去购买一辆相同的汽车,该物品不会放在手套箱里新车。它只在那辆特定汽车的手套箱里,而不是所有相同类型的汽车。)

这将涉及在创建时将引用从一个表单传递到另一个表单。例如,如果Form2需要引用该值,那么Form2正式依赖于Form1,因此它应该在其构造函数中需要它:

private Form1Instance { get; set; }
public Form2(Form1 form1Instance)
{
    this.Form1Instance = form1Instance;
}

然后当Form1创建新的Form2时,它会为自己提供引用:

var form2 = new Form2(this);
form2.Show();

然后在Form2中,您可以访问该实例:

var theNumber = this.Form1Instance.number1;

如果必须继续使用其他形式,请使用相同的模式。第三种形式具有依赖性,因此在创建时需要引用。因此,无论何种形式创建它都必须提供引用,因此它也具有依赖性,因此它在创建时需要引用。等等。