大家好我在第一种表格中有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;我在这里错过了什么?
答案 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;
如果必须继续使用其他形式,请使用相同的模式。第三种形式具有依赖性,因此在创建时需要引用。因此,无论何种形式创建它都必须提供引用,因此它也具有依赖性,因此它在创建时需要引用。等等。