C# 如何从另一个类访问form1变量?
如何从其他类访问form1字符串变量C# 如何从另一个类访问form1变量?,c#,winforms,C#,Winforms,如何从其他类访问form1字符串变量 public partial class Form1: Form { public Form1() { InitializeComponent(); } public string deva = "123"; //button private void button8_Click(object sender, EventArgs e) { d
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
public string deva = "123";
//button
private void button8_Click(object sender, EventArgs e)
{
deva = "456";
}
private void button9_Click(object sender, EventArgs e)
{
Other ks = new Other();
ks.test_me();
}
}
public class Other: Form1
{
//trying to access Form1 variable.
public void test_me()
{
Form1 fm = new Form1();
MessageBox.Show(fm.deva);
//deva is 123 but not 456.
//I clicked on button and values changes it form1 however from here it assigns just default value
}
//
//Does creating a new form1 will reset its values?
//Somebody please help me. how to solve this issue.
}
将变量设置为静态。直接使用类而不是对象访问它
public static string deva = "123";
public void test_me()
{
//Form1 fm = new Form1();
MessageBox.Show(Form1.deva);
}
默认值为每个新实例设置一个值 如果要保留最后一个值,请创建一个
static
属性
public static string deva = "123";
回答标题问题。
阅读Jon Skeet的评论,了解您的方法不起作用的原因 如果您想访问另一个实例的变量,那么您需要以某种方式引用该实例 在
Other的构造函数中单向传递它
public class Other: Form1
{
private readonly Form1 _Form1;
public Other(Form1 form1)
{
_Form1 = form1;
}
public void test_me()
{
MessageBox.Show(_Form1.deva);
}
}
public class Form1
{
private void button9_Click(object sender, EventArgs e)
{
Other ks = new Other(this);
ks.test_me();
}
}
然后在此处创建Other的新实例
pass您的Form1的实例
tiOther的构造函数
public class Other: Form1
{
private readonly Form1 _Form1;
public Other(Form1 form1)
{
_Form1 = form1;
}
public void test_me()
{
MessageBox.Show(_Form1.deva);
}
}
public class Form1
{
private void button9_Click(object sender, EventArgs e)
{
Other ks = new Other(this);
ks.test_me();
}
}
不需要从form1继承,请通过构造函数传递对象
public class Other {
Form1 obj = null;
public Other(Form1 object)
{
this obj = object;
}
public void test_me()
{
MessageBox.Show(obj.deva);
}
}
是的,它将具有默认值-因为您正在创建Form1
的新实例。不会有与Form1
的任何其他实例关联的值。面向对象编程的一半要点是对象具有状态。。。两个不同的对象具有独立的状态,因此无法通过创建不同的对象来获取一个对象的状态。在这种情况下,由于您“处于”一个Form1
的实例中(因为Other
继承自Form1
),您可能只需要MessageBox.Show(deva)代码>,正在访问此实例的状态。您的目标是什么?在另一个类中访问它?或者在同一个类中显示它,就像您尝试在内部按钮9\u单击一样?谢谢大家。我本可以早点问这个问题的。我花了好几个小时试图解决这个问题。现在我感觉没有压力了。谢谢你的回答。谢谢你的回答。谢谢你的回答。